我有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来获取这些时间戳,我认为那是UTCEDIT2:我相信我已经找到了这个问题。虽然我的结束日期是9月21日,但我实际上是使用time()来获取结束日期,time()返回了错误的时间戳,也许它没有考虑GMT + 12,无论我将时间()切换为strtotime( date('d M Y'))并返回正确的时间戳!尤里卡591天
干杯!
答案 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是可靠且容易的。我不知道任何特殊功能,我也没有看到它们存在的原因。