我正在尝试计算两个日期之间的星期数。以下代码的结果为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”而没有任何错误。
谢谢
蒂姆
答案 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(一周的秒数);然后,您可以根据需要将floor
或ceil
转换为整数值:
$HowManyWeeks = (strtotime( '2019-04-21 23:59:00' ) - strtotime( '2019-03-25 00:00:00' )) / 604800;
echo $HowManyWeeks;
输出:
3.9939484126984