我可以使用这些数据:
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)(反之亦然),同时考虑所有可能的例外情况,如夏令时,1970-2038时间限制等?他们无论如何重要吗?
PHP函数主要不允许指定本地时间的时区来转换时间 - 它们占用服务器的本地时间,这不是我想要的(我也不想改变它) )。 我显然可以从1346728503(3)中减去8.75*60*60
,但无论如何都会产生准确的值?
答案 0 :(得分:3)
好的,首先:接受时间戳的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的时区是什么。
答案 1 :(得分:1)
您已使用gmdate()
内置它以获取GMT中的日期/时间,并gmstrftime()
从给定的日期/时间字符串进行转换。
或者你可以使用timezone_offset_get()并手动完成。
答案 2 :(得分:0)