我有这些数据可供使用:
Timezone of local time as integer: 8.75 (which is UTC+8.75)
1) 2012-09-04 03:15:03
2) 2012-09-03 18:30:03 (GMT)
3) 1346728503
4) 1346697003 (GMT)
现在,我想知道如何将本地时间 (1) 转换为 GMT 一 (2)(反之亦然),同时考虑到所有可能的异常(exception)情况,例如夏令时、1970-2038 年时间限制等?无论如何,它们重要吗?
PHP 函数主要不允许指定本地时间的时区来转换时间 - 它们采用服务器的本地时间,这不是我想要的(而且我也不想改变它)。 我显然可以从 1346728503 (3) 中减去 8.75*60*60
,但是无论如何这都会产生准确的值吗?
最佳答案
好的,首先:接受时间戳的 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
设置的时区的时间;您可以使用 date_default_timezone_get
询问 PHP 该时区是什么),或 gmdate
获取 UTC。
关于php - 将本地时间转换为 GMT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12253042/