PHP:以YYYY-MM-DD格式获取两个日期之间的天数[重复]

Posted

技术标签:

【中文标题】PHP:以YYYY-MM-DD格式获取两个日期之间的天数[重复]【英文标题】:PHP: get number of days between two dates in format YYYY-MM-DD [duplicate] 【发布时间】:2011-03-12 05:46:05 【问题描述】:

可能重复:How to find number of days between two dates using php

有没有一种快速简便的方法可以用 PHP(不是 mysql)计算这种格式 (YYYY-MM-DD) 的两个日期字符串之间的天数差?

【问题讨论】:

How to find number of days between two dates using php 和其他几个的副本 @Gordon 错误的选择;接受的答案是错误的:p @Artefacto 随意提出其他建议。但在我作为重复链接的问题的答案中,至少有五个其他链接指向类似问题。链接到问题并不意味着必须使用已接受的答案吗? @Gordon 检查链接后,您的链接实际上是唯一完全相同的。 @Artefacto 相信我,这已经被问过很多次了:) 我只是懒得做 OP 的工作并找到一个更合适的。就像我说的,随意寻找更合适的。 【参考方案1】:
$date1 = new DateTime("2010-07-06"); //inclusive
$date2 = new DateTime("2010-07-09"); //exclusive
$diff = $date2->diff($date1);
echo $diff->format("%a"); //3

(仅限 PHP 5.3 及更高版本)

我看到的 PHP

strtotime("-1 days");
strtotime("-2 days");
...
strtotime("-n days");

直到我们到达第一个日期的 unix 时间戳。从概念上讲,您可以通过更有效的方式来做到这一点,首先猜测两天的时间戳差异的天数,然后测试邻域。

为什么除以 86400 不起作用

date_default_timezone_set("Europe/Lisbon");
$date1 = strtotime("2010-03-28");
$date2 = strtotime("2010-03-29");
echo ($date2-$date1)/86400; //gives 0.95833333333333
$date1 = strtotime("2010-10-31");
$date2 = strtotime("2010-11-01");
echo ($date2-$date1)/86400; //gives 1.0416666666667

正如 Gordon 正确指出的那样,如果之前将时区设置为“UTC”,除以 86400 将是解决此问题的有效方法——只是不要忘记之后将其恢复为之前的值。

【讨论】:

+1 用于使用DateTime class。 +1 用于使用对 DST 敏感的 DateTime 类。 (当然,当使用正确的时区时。) @Bog 同意,但不再支持 PHP 5.1 及更低版本;人们不应该使用它们——当然,这并不是说它会阻止它们。 @Gordon 我添加了两个示例。 @Gordon 这是个好主意,它实际上解决了这个特殊问题。只有在时区很重要的情况下(例如计算未来时间、两个任意时间之间的差异等),它才会开始崩溃。【参考方案2】:

复制自我在问题下方链接的副本。


以下 SO 问题可能会有所帮助:

How to calculate the date difference between 2 dates using php Dates difference with php Calculate the difference between date/times in PHP Date Difference in php? Getting the difference between two time/dates using php?

More >>

【讨论】:

【参考方案3】:

你可以使用这个函数来获取两个date("Y-m-d H:i:s")之间的天数:

function dateDiff($dateStart, $dateEnd) 

    $start = strtotime($dateStart);
    $end = strtotime($dateEnd);
    $days = $end - $start;
    $days = ceil($days/86400);
    return $days;

【讨论】:

谢谢,这看起来很棒,我会接受你的回答! 这和@Mark的回答有同样的问题;它不考虑夏令时。 DateTime 类只有 php 5.2 或更高版本。我可以向您展示所有使用 php 5.1 的主要稳定业务发行版(以 RHEL/CentOS 为例)

以上是关于PHP:以YYYY-MM-DD格式获取两个日期之间的天数[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Java 8 LocalDateTime - 如何获取两个日期之间的所有时间

计算两个日期之间相差的天数(带带负数) 支持格式YYYY-mm-dd比较

为啥“YYYY-MM-DD”日期格式的两个字符串在PHP中的小于或大于比较工作,即使它们是字符串?

Python - 以 YYYY-MM-DD 格式获取昨天的日期作为字符串

两个日期之间相差的天数

如何在 PHP 中的 yyyy-mm-dd hh:mm:ss 中获取 GMT 日期