PHP - 计算两个日期之间的周数
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP - 计算两个日期之间的周数相关的知识,希望对你有一定的参考价值。
我正在尝试计算两个日期之间的周数。以下代码的结果为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”没有任何错误。
谢谢,
蒂姆
答案
您传递给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
另一答案
$ 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++;
...
另一答案
您可以使用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);
希望这可以帮助,
以上是关于PHP - 计算两个日期之间的周数的主要内容,如果未能解决你的问题,请参考以下文章