【问题标题】:How is PHP's $_SERVER[REQUEST_TIME] set?PHP 的 $_SERVER[REQUEST_TIME] 是如何设置的?
【发布时间】:2013-06-06 09:18:08
【问题描述】:

在服务器上设置请求时间会发生什么?是否考虑了配置服务器的时区?

我问是因为我需要知道,如果我有一个将时区设置为站点范围变量的站点,并且我将某些内容与 $_SERVER['REQUEST_TIME'] 进行比较以了解它是否已过期,我不确定时区不匹配是否可能。

【问题讨论】:

    标签: php web-applications timezone superglobals


    【解决方案1】:

    $_SERVER'REQUEST_TIME' 是一个 Unix 时间戳。这应该是足够的信息,但如果不是:Unix 时间戳始终基于 UTC。

    PHP 示例

    DateTime 中的 Unix 时间戳记法是在数字前加上 at 符号(“@”)。然后第二个 $timeZone 参数是 ingored 并默认为“UTC”,因为它是一个始终基于 UTC 的 Unix 时间戳:

    $requestTime = new DateTime("@$_SERVER[REQUEST_TIME]");
    

    给予:

    class DateTime#1 (3) {
      public $date          => string(19) "2013-06-23 07:45:44"
      public $timezone_type => int(1)
      public $timezone      => string(6) "+00:00"
    }
    

    甚至不可能(通过构造时的时间戳)将DateTime 对象强制到不同的时区 - 只能在稍后的changing the timezone

    【讨论】:

    • 这是我不确定的一小部分信息。 unixtimestamp.com 暗示 Unix 时间戳并不总是采用 UTC。 PHP 引擎正在做的事情是否默认为 UTC 的 Unix 时间戳?
    • 不,unix 时间戳实际上是自 1970 年 1 月 1 日以来的秒数,以 UTC 表示。所以没有与之相关的真实时区,这只是他们选择的起点。任何使用不同起点的东西都不是 unix 时间戳。
    • 我第一次想到时间戳前面的 @ 符号是您只是在使 PHP E_Notice 静音,因为其中可能没有 REQUEST_TIME 元素。但是在尝试并阅读 the docs 之后,我可以说这是正确的。
    猜你喜欢
    • 1970-01-01
    • 2012-08-19
    • 2010-10-11
    • 2018-02-23
    • 1970-01-01
    • 2011-10-24
    • 2023-03-13
    • 2011-09-21
    • 2010-12-24
    相关资源
    最近更新 更多