【问题标题】:PHP Date Timestamp wrongPHP日期时间戳错误
【发布时间】:2012-09-01 09:52:54
【问题描述】:

我一生都想不通为什么从下面的代码返回的 unix 时间戳显示为 Fri, 31 Aug 2012 06:26:00 GMT。我已经在我的服务器以及http://www.onlineconversion.com/unix_time.htm 上对此进行了测试。返回的日期/时间实际上应该是 Fri, 31 Aug 2012 02:26:41 PM。

$stringtime = strtotime(DATE("m/d/y G:i", STRTOTIME("2012-08-31 02:26:41")));

谁能告诉我我做错了什么。

【问题讨论】:

  • 猜猜这 41 秒只是一个未命中的咒语?

标签: php


【解决方案1】:

Unix 时间戳始终为 GMT(无时间偏移)。您可能需要在 php.ini 或代码中设置偏移量,以允许您看到 4 小时的差异。

【讨论】:

  • 是的,对于 EDT (GMT -4) 时间,时差似乎是正确的。更改服务器上 php.ini 文件中的设置,或使用date_default_timezone_set 设置时区。有关该功能的文档,请参阅 here
  • @Chaser324 感谢您在评论中添加链接,au.php.net 目前似乎很不稳定,正在等待它弹出以将链接添加到我的答案中。 +1
  • 没问题。 php.net 网站目前对我在美国的我来说似乎也有点不稳定。
  • 不是时区问题。输入时间未指定时区,因此不会对其进行转换(假定为本地时间)。看他的格式字符串。它与输出不匹配。它仅将 G 用于 GMT 格式的输出
  • 说 UNIX 时间戳是 GMT 是不正确的。他们根本没有时区。它们是自固定时间点(恰好是 1970-01-01T00:00:00Z)以来的秒数。
【解决方案2】:

您需要先使用date_default_timezone_set函数设置时区,即

date_default_timezone_set('America/Los_Angeles');

Manual.

【讨论】:

    【解决方案3】:

    strtotime() 将输入字符串转换为 unix 时间戳。如果您的输入字符串没有时区信息,PHP 必须猜测您指的是哪个时区。它并没有真正猜测......它会查看您的默认时区。

    UNIX 时间戳是自 1970 年 1 月 1 日 UTC 以来的秒数。所以如果你这样做:

    echo strtotime('1970-01-01 00:00:00');
    // depends on your default time zone
    

    您可能期望为零。但是您没有在字符串中指定时区,因此它将使用默认时区。实际输出会有所不同。

    date_default_timezone_set('UTC');
    echo strtotime('1970-01-01 00:00:00');
    // always 0
    

    现在它将为零。或者您可以消除歧义:

    echo strtotime('1970-01-01 00:00:00 UTC');
    // always 0
    

    同样,当您使用date() 时,PHP 在显示时间时应用默认时区。

    您问题中的代码实际上并未显示您的错误所在。所以我不能真正告诉你你的问题是什么,除了你不明白 PHP 如何处理时间戳和时区。

    如果您的时间戳是正确的,那么您可能只需要使用date_default_timezone_set() 来设置您的时区。这将影响以后对date() 的所有调用。

    您也可能对使用 DateTime 类感兴趣,这比从 1970 年开始计算秒数更简单。

    【讨论】:

      【解决方案4】:

      不要使用 G。这会将其转换为 Gmt 及其使用的唯一格式字符。你只是格式字符串错误

      'D, d M Y h:i:s A'

      $stringtime = date('D, d M Y h:i:s A' , strtotime("2012-08-31 02:26:41"));

      【讨论】:

      • 字符串中的G与GMT无关。 G 24-hour format of an hour without leading zeros - 0 through 23
      猜你喜欢
      • 1970-01-01
      • 2013-03-02
      • 1970-01-01
      • 2016-08-01
      • 1970-01-01
      • 2013-06-16
      • 1970-01-01
      • 2015-06-14
      相关资源
      最近更新 更多