PHP-计算两个日期之间的星期数

时间:2019-04-30 02:10:15

标签: php date strtotime

我正在尝试计算两个日期之间的星期数。以下代码的结果为3周。但是,实际上是4周。为什么计算不正确?解决方法是什么?

我很想知道为什么这个特定的代码不能正常工作,但也想知道是否有更好的方法。

我正在运行PHP版本7.2。下面是我正在使用的代码:

$HowManyWeeks = date( 'W', strtotime( 2019-04-21 23:59:00 ) ) - date( 'W', strtotime( 2019-03-25 00:00:00 ) );

$ HowManyWeeks的值应为4,但显示为3。

此外,当我在https://phpfiddle.org/尝试该代码时,它给出以下错误:

Line : 2 -- syntax error, unexpected '23' (T_LNUMBER), expecting ',' or ')'

但是在我的服务器上运行它时,它显示为“ 3”而没有任何错误。

谢谢

蒂姆

3 个答案:

答案 0 :(得分:2)

您可以使用DateTime()来实现:

$date1 = new DateTime('2017-04-30');
$date2 = new DateTime('2019-04-30');
// I have left the remainer. You may need to round up/down. 
$differenceInWeeks = $date1->diff($date2)->days / 7;
print_r($differenceInWeeks);

希望这会有所帮助,

答案 1 :(得分:2)

  

$ HowManyWeeks的值应为4

为什么?请注意,每周使用php的时间是begin with Monday,而我在日历中算是3。

如果需要4(星期日为一周的第一天),请检查星期几

$time1 = strtotime('2019-04-21 23:59:00');
$week1 = idate('W', $time1);
if(idate('w', $time1) == 0) # Sunday, next week
    $week1++;
...

答案 2 :(得分:2)

您传递给strtotime的日期必须用引号引起来。正确答案的确是3,因为两次之间有3周,6天,23小时59分钟。试试这个:

$HowManyWeeks = date( 'W', strtotime( '2019-04-21 23:59:00' ) ) - date( 'W', strtotime( '2019-03-25 00:00:00' ) );
echo $HowManyWeeks;

正如已经指出的那样,这仅在同年的几周内有效。像在@MiroslavGlamuzina答案中那样使用DateTime对象会更容易,或者您可以将strtotime的差除以604800(一周的秒数);然后,您可以根据需要将floorceil转换为整数值:

$HowManyWeeks = (strtotime( '2019-04-21 23:59:00' ) - strtotime( '2019-03-25 00:00:00' )) / 604800;
echo $HowManyWeeks;

输出:

3.9939484126984

Demo on 3v4l.org