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(一周中的秒数);然后,如果需要转换为整数值,您可以使用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

另一答案

$ 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 - 计算两个日期之间的周数的主要内容,如果未能解决你的问题,请参考以下文章

怎么取两个日期之间的周数

在计算两者之间的周数时避免夏令时

如何在Oracle中生成一周的第一天,一周的最后一天和两个日期之间的周数

使用给定的参考年份计算给定日期的周数

php如何计算两个日期中间有多少天,并每过一天减1

如何用PHP+MySQL计算两个日期之间的月份数和其余下的天数?