如何计算php中2个unix时间戳之间的间隔,除以86400(60 * 60 * 24)

时间:2010-09-20 13:03:25

标签: php strtotime

我有2个unix时间戳,我在AsiaPacific / Auckland时区(GMT + 12,DaylightSavings = GMT + 13)

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

我的示例日期是

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,无论我将时间()切换为strtotime( date('d M Y'))并返回正确的时间戳!尤里卡591天

干杯!

3 个答案:

答案 0 :(得分:5)

在计算差异之前计算两个时间戳的完整天数:

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

您的结果始终是整数。

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

strtotime($str.' 00:00:00+0000')

答案 1 :(得分:2)

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

答案 2 :(得分:0)

除以86400是可靠且容易的。我不知道任何特殊功能,我也没有看到它们存在的原因。