Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 两个日期内有多少周_Php_Mysql_Date - Fatal编程技术网

Php 两个日期内有多少周

Php 两个日期内有多少周,php,mysql,date,Php,Mysql,Date,我的数据库(MySQL)中有开始日期和结束日期。 我怎样才能得到答案,在这两个日期内有多少周(或几天)?(mysql或php) 例如,我有这样的数据库: 已开始且将结束 2009-12-17 | 2009-12-24 2009-12-12 | 2009-12-26 更新问题: 如何使用DATEDIFF? 我怎样才能让它工作?或者我应该完全不同地使用DATEDIFF吗 从my_表中选择DATEDIFF('Started','will_end')作为'Duration',其中id='110' 自M

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

例如,我有这样的数据库:

已开始且将结束
2009-12-17 | 2009-12-24
2009-12-12 | 2009-12-26

更新问题:
如何使用DATEDIFF? 我怎样才能让它工作?或者我应该完全不同地使用DATEDIFF吗

从my_表中选择DATEDIFF('Started','will_end')作为'Duration',其中id='110'

自MySQL 4.1.1以来,MySQL有一个返回两个日期之间天数差的函数

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

您可以在每个日期使用该函数,然后减去这两个日期,以天为单位计算差值。


找到天数并除以7,如果两列
$d1
$d2
存储从
time()获取的unix时间戳,那么这行代码就足够了:

<?php
  $dayDif    = date('z',strtotime('2009-12-17)') - date('z',strtotime('2009-12-24)');
  $numWeeks  = $dayDif / 7;
?>
$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)
计算天数并除以七不会给出两个日期之间的周数。相反,当考虑ISO计算中的周数时,它将返回除以7的结果,该结果并不总是对应于两个日期之间的周数

例如,给定
start_date=“2010-12-26”
end_date=“2011-01-25”
您将经历W51,52,01,02,03,04,根据ISO,这是6周,但如果您只需计算差值并除以7,您将得到5

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

进行计算的最佳方法是获得
开始日期
年份的最后一周编号,该编号应参考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;
}
功能周($ladate2,$ladate3){
$start_week=日期(“W”,标准时间($ladate2));
$end_week=日期(“W”,标准时间($ladate3));
$number_of_weeks=$end_week-$start_week;
$weeks=array();
$weeks[]=$start\u week;
$increment_date=$ladate2;
$i=“1”;

如果($number_of_week)你是指整周吗?例如,从一周内的星期四到下周的星期四实际上不包含整周,但包含7天,因此第二个星期四比第一个星期四晚一周?在处理时间和日期时,请精确说明(没有双关语)这似乎是@jsk重新提出的问题:如果年份不同怎么办?。请注意,程序员在编写函数时应该考虑所有这些假设。不要仅仅根据2-3个示例裁剪可接受的输入…啊,太棒了。unix时间戳方法可以跨年工作。-1,如果存在时间戳,这将失去精度,并且很复杂这是另一个非常合理的方法,可以正确而简单地做到。是的,是的。这非常非常非常非常复杂。这很明显,对吧?不用说…你混淆了“非常非常非常非常复杂”和“比更好的解决方案更复杂”的含义。的确,一天中没有24小时,但急诊室不是吗ror很小吗?