2013-03-18 31 views
1

我有一个包含以下内容的表:本周如果date()函数和日期从mysqli的

StartWeek | StartName | 
2012-07-16 | 1   | 

我想做的事情。是采取开始的一周,当前的日期,并计算从现在到现在之间经过了多少时间。

到目前为止,我有这样的:

function getCurrentWeekName() { 
$mysqli = new mysqli(DB_SERVER, DB_USER, DB_PASSWORD, DB_NAME); 
    if (!$mysqli) { 
     die('There was a problem connecting to the database.'); 
    } 
    else { 
     date_default_timezone_set('UTC'); 
     echo "Current date: ".$current_date = date('Y-m-j')."<br>"; 
     $mysqli = new mysqli(DB_SERVER, DB_USER, DB_PASSWORD, DB_NAME); 
     $query = $mysqli->prepare("SELECT StartWeek FROM Week"); 
     $query->execute(); 
     $query->bind_result($start_date); 
     while ($query->fetch()){ 
      $start_date = $start_date; 
     } 
     echo "start date: ".$start_date."<br>"; 
     echo "time passed: ".$time_passed = strtotime($current_date) - strtotime($start_date)."<br>"; 
     echo "number of days since start: ".$num_of_days = ceil($time_passed/(86400*7))."<br>"; 
     $week_num = ceil($num_of_days/7); 
     $query = $mysqli->prepare("SELECT StartName FROM Week"); 
     $query->execute(); 
     $query->bind_result($start_name); 
     while ($query->fetch()){ 
      echo "Start name: ".$start_name = $start_name."<br>"; 
     } 
     $week_num = $start_name + $week_num; 
     echo "Week Number: ".$week_num; 
    } 
    $mysqli->close(); 
} 

的问题是,这将返回以下信息:

Current date: 2013-03-18 
start date: 2012-07-16 
time passed: -1342394787 
number of days since start: -2219 
Start name: 1 
Week Number: -316 

所以很明显我做错了。我认为这一定与我的计算时间有关,也许我不应该使用strtotime。任何人都可以帮忙吗?

+0

很奇怪 - 这将是有趣的是分别查看'strtotime($ current_date)'和'strtotime($ start_date)'的输出,因为在那里看起来有些错误。 – fvu 2013-03-18 21:37:56

+0

有趣的是: strtotime current_date: strtotime start_date:1342396800 因此,在strtotime之后current_date没有出现,可能是因为它是用date()创建的? – 2013-03-18 21:46:27

+0

@david:nope。它只是一个字符串,一旦它出现过时。当我在上面的示例日期中执行strtotime()时,我将'21168000'作为diff。一个很大的缺陷:你在'$ num_of_days'(里面有一个'/ 7')计算周,然后在你的周计算中再次除以7。在MySQL中使用datediff会给我245天,这是35周。 – 2013-03-18 21:49:34

回答

3

如果你正在寻找一个在天只是一个区别,你可以做到这一点directly in MySQL

SELECT DATEDIFF(now(), StartDate) AS diff_in_days 

其他差异,例如小时,你也可以做这样的事情

SELECT unix_timestamp(now()) - unix_timestamp(start_date) AS seconds 
+0

谢谢你。前者的查询让我能够达到我需要的245天。我只是将它除以7,然后从那里得到周。 :) – 2013-03-18 21:58:30

0

您可以用PHP日期DIFF做这个=>http://php.net/manual/en/function.date-diff.php

检查这个,你可以使用:

//replace the values for $startDate and $endDate: 
$startDate = strtotime($startDate); 
$endDate = strtotime($endDate); 
$intervalo = date_diff(date_create($startDate), date_create($endDate)); 
$out = $intervalo->format("Years:%Y,Months:%M,Days:%d,Hours:%H,Minutes:%i,Seconds:%s"); 
    if(!$out_in_array) 
     return $out; 
    $a_out = array(); 

    array_walk(explode(',',$out), 
    function($val,$key) use(&$a_out){ 
     $v=explode(':',$val); 
     $a_out[$v[0]] = $v[1]; 
    }); 
    print_r($a_out); 
相关问题