OK,第一:接受时间戳不接受时区,因为UNIX时间戳不知道或关心的PHP函数时区。
在我输入的时间是2012年9月3日星期一15:30:10在美国东部时区,目前正在观测夏令时(“夏令时”)。在UTC时区,对应于19:30:10。无论哪种方式,它都是UNIX时间戳(time_t
值)1,346,700,610。根据您在地球表面的位置,您当地的时间可能会在9月3日上午7:30:10至9月4日上午9:30:10的26小时范围内(2012-09-09) 03T07:30:10-12:00至2012-09-04T09:30:10 + 14:00)。但是不管你的本地标签是什么,所涉及的时间仍然是1,346,700,610到UNIX和PHP。
它看起来像你试图计算基于时区的不同time_t
值,但不计算。时区偏移不会应用于time_t
值,该值不会更改;它们只适用于人类可读的表示。
如果有可能,请勿尝试进行自己的时区转换。规则往往会改变。目前,我的本地时间比UTC早4个小时;在几个月内,它会提前5个小时。此外,这一变化发生的时间规则今年与五年前不同。因此,根据我试图转换的具体时间戳值,我必须应用不同的规则。
使用库函数。
要将时间的字符串表示形式转换为time_t
值,请使用strtotime
。如果字符串包含时区参考,则strtotime
将为您执行转换。如果没有,你可以使用date_default_timezone_set
,正如Connie所建议的那样,告诉PHP在解释字符串时使用什么时区。
要将time_t
值转换回字符串,用date
获得“本地”时间(即,根据与date_default_timezone_set
设置时区的时间,你可以问的PHP时区与date_default_timezone_get
什么),或gmdate
获取UTC。
http://stackoverflow.com/a/3905222/1266559 答案,极大地方便了时区 – Magefast