2012-09-03 147 views
1

我可以利用这些数据:转换本地时间GMT

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)转换为格林尼治标准时间一(2)(反之亦然)考虑所有可能的例外情况,如夏季时间,1970-2038年的时间限制等?无论如何他们都很重要吗?

PHP函数主要不允许指定本地时间的时区来转换时间 - 它们采用服务器的本地时间,这不是我想要的(我也不想改变它)。 我明显可以从1346728503(3)中减去8.75*60*60,但是无论如何,这会产生准确的值吗?

+0

http://stackoverflow.com/a/3905222/1266559 答案,极大地方便了时区 – Magefast

回答

3

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。

+0

感谢您的广泛解释! :)我只是碰到一些奇怪的问题,如1969年12月31日15:15在时间戳GMT的MySQL表(这不应该是可能的?)和所有这些时区是有问题的。我想我会用最基本的计算方式让它像那样。 我需要复制WordPress的时间转换器,但它也有错误......您不能使用1876作为博客文章创建日期。它将在1876年在一个数据库表格中,但GMT将停止准确同步。 – Atadj

+0

我添加了一些可能有帮助的函数参考。 时间0是1970年1月1日午夜的UTC,在其他时区可能会在该日期的下午2点或早于上次日期(1969年12月31日)的中午出现。 一些应用程序将处理负面时间戳,让您走得更远。 –

0

您是否正在寻找?

date_default_timezone_set('America/Denver'); 

对于时区将与此功能工作的完整列表,click here

+0

我正在寻找一种方法来改变(1)到(2)从我的名单考虑的各种例外。 – Atadj

1

您已将它与gmdate()一起内置以获取格林尼治标准时间的日期/时间和gmstrftime()以从给定的日期/时间字符串进行转换。

或者你可以使用timezone_offset_get()并手动执行。

相关问题