PHP strtotime和DST

时间:2014-10-30 02:34:25

标签: php strtotime dst

我有一个用户输入时间/日期的应用程序,然后通过strtotime()转换为Unix时间戳(用户设置自己的时区)。这通常很有效; strtotime()甚至设法将诸如2014年3月9日凌晨2:15之类的时间转换为时间戳(对应于用户输入“2014年3月9日凌晨3:15”时将返回的时间戳)。 / p>

但是,假设用户想要在2014年11月2日上午输入时间 - 具体地说,在2:00到3:00之间。用户是否可以添加一个元素来指定将使用哪个时间?

例如,如果用户通过strtotime()传递'2014年11月2日上午2:15',则结果是对应于该日期的“秒”2:15的UNIX时间戳。

如何指定“第一个”2:15?

1 个答案:

答案 0 :(得分:0)

您可以包含时区偏移或缩写以及要解析的字符串,通常选择正确的时间戳。

例如,假设您正在使用美国东部时区("America/New_York"),则可以包含这样的偏移量:

strtotime('2:15 AM November 2, 2014 -0400')  // 1414908900
strtotime('2:15 AM November 2, 2014 -0500')  // 1414912500

或缩写:

strtotime('2:15 AM November 2, 2014 EDT')  // 1414908900
strtotime('2:15 AM November 2, 2014 EST')  // 1414912500

现在我说“通常”的原因是因为时区缩写可能不明确。检查Wikipedia's list of time zone abbreviations,对“EST”有两种不同的解释。有些更糟糕,例如对“CST”的5种不同解释。一般来说,依靠输入的时区缩写并不好。坚持抵消,你会没事的。

当然,您仍然需要知道哪些偏移适用于哪些时区。在PHP中,您可以使用timezone_offset_get

您可能也对this question, and it's answer感兴趣,它可以帮助您确定输入时间是无效还是含糊不清。然后,您可以相应地提示用户,并且(在不明确的情况下)要求他们在两个可能的偏移之一中进行选择。