两个日期里面有几个星期

时间:2009-12-22 12:10:59

标签: php mysql date

我的数据库(MySQL)中有开始日期和结束日期。 我怎样才能得到答案,这2个日期里面有多少周(或几天)? (mysql或php)

例如,我有这种数据库:

开始和| will_end
2009-12-17 | 2009-12-24
2009-12-12 | 2009-12-26
...

更新问题:
如何使用DATEDIFF? 我怎样才能使这个工作?或者我应该以完全不同的方式使用DATEDIFF?

SELECT DATEDIFF('Started','will_end')AS'持续时间'FROM my_table WHERE id ='110';

6 个答案:

答案 0 :(得分:2)

如果两列$d1$d2存储从time()获得的unix时间戳,则此简单行就足够了:

$diffweek = abs($d1 - $d2) / 604800; 

否则,如果列是DATETIME类型,则:

$diffweek = abs(strtotime($d1) - strtotime($d2)) / 604800; 

p / s:604800是一周内的秒数(60 * 60 * 24 * 7)

p / s2:您可能想要intval($diffweek)round($diffweek)

答案 1 :(得分:2)

计算天数除以7将不会给出两个日期之间的周数。相反,当根据ISO计算中的周数进行思考时,它将返回除以7的结果,该结果并不总是与两个日期之间的周数相对应。

例如,给定start_date = "2010-12-26"end_date = "2011-01-25",您将通过W51,52,01,02,03,04,这些是ISO的6周,但如果您只是计算差异除以7,你就得到5。

当开始日期和结束日期属于不同年份时,会出现此问题。

进行计算的最佳方法是获取start_date年的上周数字,并且应该参考12月28日。

function weeks($ladate2,$ladate3) {
    $start_week= date("W",strtotime($ladate2));
    $end_week= date("W",strtotime($ladate3));
    $number_of_weeks= $end_week - $start_week;

    $weeks=array();
    $weeks[]=$start_week;
    $increment_date=$ladate2;
    $i="1";

    if ($number_of_weeks<0){
        $start_year=date("Y",strtotime($ladate2));
        $last_week_of_year= date("W",strtotime("$start_year-12-28"));
        $number_of_weeks=($last_week_of_year-$start_week)+$end_week;
    }

    while ($i<=$number_of_weeks)
    {
        $increment_date=date("Y-m-d", strtotime($ladate2. " +$i week"));
        $weeks[]=date("W",strtotime($increment_date));

        $i=$i+1;
    }

    return $weeks;
}

function diff_weeks($ladate2,$ladate3) {
    $weeks=weeks($ladate2,$ladate3);
    $diff_weeks=count($weeks);

    return $diff_weeks;
}

祝你好运, Manikam

答案 2 :(得分:1)

MySQL有datediff,它返回两个日期之间的天数差异,自MySQL 4.1.1。

请注意,根据手册,DATEDIFF(expr1,expr2)会将expr1 – expr2表示为从一个日期到另一个日期的天数值。 expr1和expr2是日期或日期和时间表达式。 在计算中仅使用值的日期部分

答案 3 :(得分:1)

您可以在每个日期使用TO_DAYS功能,并减去两个以计算天数差异。

答案 4 :(得分:0)

DATEDIFF

找出天数并除以7

答案 5 :(得分:-2)

<?php
  $dayDif    = date('z',strtotime('2009-12-17)') - date('z',strtotime('2009-12-24)');
  $numWeeks  = $dayDif / 7;
?>

php的日期函数的z选项为您提供一年中的某一天(0 - 365)。通过减去这两个值,您可以找到日期之间的天数。然后将因子数乘以七。

仔细阅读本页,日期()功能丰富。 http://php.net/manual/en/function.date.php