【问题标题】:Different timezones have the same timestamp?不同的时区有相同的时间戳?
【发布时间】:2012-02-04 17:24:21
【问题描述】:

我运行了这个脚本:

echo date_default_timezone_get()."\n";
echo "----\n";

date_default_timezone_set('Asia/Kabul');
echo date_default_timezone_get()."\n";
echo "----\n";

echo time()."\n";
$dt = new DateTime;
echo $dt->format('U') . "\n";
echo "----\n";

date_default_timezone_set('UTC');
echo date_default_timezone_get()."\n";
echo "----\n";

echo time()."\n";
$dt = new DateTime;
echo $dt->format('U') . "\n";

对于所有 4 个时间戳值,它显示:1325905766

我在某处读到新的 DateTime 总是将 UTC 设置为时区,无论时区设置如何,所以我明白了,但是 time() 呢?

几秒钟前,在另一台服务器上(可能不在欧洲 (ideone.com)),它返回 4 次:1325905723

也一样! (显然有几秒钟的差异,但时区相同。)

time() 总是并且只返回 UTC???怎么回事??

【问题讨论】:

  • 不久前我也遇到了类似的问题。我试图在每个用户的基础上设置时区(通过配置文件中的设置),但通过date() 函数改变的只是最后的时区标识符。它实际上并没有改变 时间 本身。

标签: php datetime time timezone utc


【解决方案1】:

是的,它们都使用 UTC。具体来说,time()U 格式都返回自 1970 年 1 月 1 日午夜 UTC(“Unix 纪元”)以来经过的非闰秒数。由于纪元是一个固定点,其定义与用户的时区无关,并且从那时起的秒数在所有时区都是相同的(忽略相对论效应等),time() 无论时区如何都返回相同的值设置。

【讨论】:

  • @Rudie:一秒钟不是leap second
  • 嗯...所以UTC实际上是34秒!?诡异的。不知道这些从无到有的神秘秒。
【解决方案2】:

time() 返回自 1970 年 1 月 1 日 00:00:00 GMT 以来的秒数。

无论您是在亚洲/喀布尔还是 Hither/Yon,自该特定时间点以来经过的秒数都是相同的。

【讨论】:

    猜你喜欢
    • 2020-07-07
    • 2013-10-30
    • 2012-12-05
    • 1970-01-01
    • 2019-12-15
    • 2013-07-16
    • 2016-07-19
    • 2017-01-24
    • 1970-01-01
    相关资源
    最近更新 更多