4

我有 2 个 unix 时间戳,我在亚太/奥克兰时区(GMT+12,DaylightSavings = GMT+13)

我想计算 2 个时间戳之间的天数间隔,其中一个在夏令时,一个不在。

我的示例日期是:

7 Feb 2009 (1233925200)21 September 2010 (1284985360)(不包括 21 日)看到这里说 591 天:http ://www.timeanddate.com/date/durationresult.html?d1=7&m1=2&y1=2009&d2=21&m2=9&y2=2010

让我们计算一下,这是我的时间戳(均基于奥克兰 00:00 时间)

1284985360-1233925200 = 51060160
51060160 / 86400 = 590.974

所以是的,我需要 591。我不想使用“汇总”解决方案

有没有像strtotime这样的可靠方法,但用于计算日期间隔,最好不需要php 5.3+

编辑:需要澄清,我正在使用 STRTOTIME 来获取这些时间戳,我认为那是 UTC

EDIT2:我相信我已经找到了问题。虽然我的结束日期是 9 月 21 日,但我实际上是在使用 time() 来获取我的结束日期,而 time() 返回了错误的时间戳,也许它不考虑 GMT+12,不管我将 time() 切换到strtotime(date('d M Y')) 它返回了正确的时间戳!尤里卡 591 天

4

3 回答 3

5

在计算差值之前计算两个时间戳的全天数:

floor(1284985360 / 86400) - floor(1233925200 / 86400)

你的结果总是一个整数。

并且由于您strtotime用于获取这些时间戳,请指定00:00:00+0000始终获得 86400 倍数的时间:

strtotime($str.' 00:00:00+0000')
于 2010-09-20T13:54:24.780 回答
2

正确的 Unix (POSIX) 时间戳采用 UTC,因此您从已经错误的值开始。您正面临一场艰苦的战斗,因为 API 通常会假定时间戳采用 UTC。最好解决这个问题,之后简单的除法实际上会给出正确的结果。

于 2010-09-20T13:29:38.020 回答
0

除以 86400 既可靠又容易。我不知道任何特殊功能,我看不出它们存在的理由。

于 2010-09-20T13:07:02.737 回答