1

我对我现在遇到的一个问题感到困惑。

$start = strtotime("2013-08-09 11:00 PM");
$end = strtotime("2013-08-11 11:00 PM");

我正在尝试计算日期和时间之间的差异。

$numOfDays = ceil(($end - $start) / 86400);  // 86400 seconds in one day

这个输出是2,我期待的是3

对我来说,好像它从日期中遗漏了最后一天?

$numOfDays = ceil(($end - $start + 1) / 86400);  // 86400 seconds in one day

另外,如果我在开始日期或结束日期上增加一秒,那么我开始得到我需要的结果,但我不确定这是否是正确的修复,以及究竟是什么导致了这种行为?

4

3 回答 3

3

这两个日期之间的差异2 天......从 9 日到 10 日是第一天,从 10 日到 11 日是第二天,两个时间戳之间的 48 小时。

于 2013-08-09T13:22:19.223 回答
2

你的数学是错误的。你们的日期之间有两天。

Day 1: 2013-08-09 11:00 PM - 2013-08-10 11:00 PM
Day 2: 2013-08-10 11:00 PM - 2013-08-11 11:00 PM

您的日期有 48 小时的差异,即 2 天。

日期

要计算一整天,不要包括时间。当您获得时间戳时,它将设置为上午 12:00:00。然后为结束日期添加 1 天。再次没有字符串中的时间,它将是 12:00:00AM,这将为您提供您正在寻找的 3 天的差异。

Day 1: 2013-08-09 12:00 AM - 2013-08-10 12:00 AM
Day 2: 2013-08-10 12:00 AM - 2013-08-11 12:00 AM
Day 3: 2013-08-11 12:00 AM - 2013-08-12 12:00 AM
于 2013-08-09T13:21:08.680 回答
1

2是正确的结果:

从 2013-08-09 11:00 PM 到 2013-08-10 11:00 PM 是 24 小时
从 2013-08-10 11:00 PM 到 2013-08-11 11:00 PM 是 24 小时
24h + 24h = 48小时 48
小时 = 2 天

于 2013-08-09T13:23:14.177 回答