这是PHP strftime()函数中的错误吗?

时间:2012-09-25 12:06:03

标签: php

我遇到了PHP的gmstrftime()函数问题。 请看:

<?
$ts[]=1348573985; // '2012-09-25 13:53:05' (date returned from mysql's from_unixtime() function)
$ts[]=1233958620; // '2009-02-06 23:17:00' (date returned from mysql's from_unixtime() function)

foreach($ts as $t) {
    echo $t." => ".gmstrftime( "%d %B %Y - %H:%M", $t )."\n";
}
?>

输出将是:

1348573985 => 25 September 2012 - 11:53
1233958620 => 06 February 2009 - 22:17

如您所见,第一个时间戳是2小时关闭(来自mysql的输出),这是正常的,因为时区设置。但第二个只有1个小时,但我没有改变两个gmstrftime()调用之间的时区??

这是PHP的gmstrftime()函数中的错误还是其他什么?

1 个答案:

答案 0 :(得分:2)

来自the manual for gmstrftime

  

与strftime()的行为相同,只是返回的时间是格林威治标准时间(GMT)。

格林威治标准时间全年都是一样的。这与英国的当地时间不同,后者在冬季设定为格林威治标准时间,而在夏季设定为“英国夏令时”(GMT + 1,即格林威治标准时间前一小时)。西欧也是如此,冬季GMT + 1,夏季GMT + 2。

您的MySQL数据库可能是为欧洲当地时间配置的,因此在转换夏季发生的Unix时间戳时,它会增加额外的小时以配合夏令时调整。

在我看来,最好的策略是将所有系统设置为使用“UTC”(基本上与GMT相同),然后在“最后一刻”转换为本地时区。您可以在其他时区上进行标准化,但UTC可以作为调试的良好基准。