1

我遇到了 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() 函数中的错误,还是其他任何错误?

4

1 回答 1

2

手册中gmstrftime

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

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

您的 MySQL 数据库大概配置为欧洲本地时间,因此在转换夏季发生的 Unix 时间戳时,它会增加一个额外的小时以与夏季时间调整保持一致。

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

于 2012-09-25T12:16:09.823 回答