好的,首先:接受时间戳的 PHP 函数不接受时区,因为UNIX 时间戳不知道也不关心时区。
当我输入时,时间是 2012 年 9 月 3 日星期一 15:30:10,在美国东部时区,目前正在遵守夏令时(“夏令时”)。在 UTC 时区中,这对应于 19:30:10。无论哪种方式,它都是 UNIX 时间戳(time_t
值)1,346,700,610。根据您在地球表面的位置,您当时的当地时间可能落在 26 小时范围内的任何时间,从 9 月 3 日上午 7:30:10 到 9 月 4 日上午 9:30:10 (2012-09- 03T07:30:10-12:00 至 2012-09-04T09:30:10+14:00)。但是无论您的本地标签是什么,对于 UNIX 和 PHP,时间问题仍然是 1,346,700,610。
看起来您试图time_t
根据时区计算不同的值,但这并不计算。时区偏移量永远不会应用于time_t
不会改变的值;它们仅适用于人类可读的表示。
如果可能,请不要尝试进行自己的时区转换。规则往往会改变。现在,对我来说,当地时间比 UTC 早四个小时;再过几个月,就会提前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。