【问题标题】:datetime goes one hour forward when using unix timestamp with localtime settings使用带有本地时间设置的 unix 时间戳时,日期时间向前一小时
【发布时间】:2011-11-29 00:49:50
【问题描述】:

首先我想告诉我的服务器时间设置:它的 +3 Europe/Istanbul 在 php 中我正在使用

date_default_timezone_set('Europe/Istanbul');

我在我的 mysql 表中使用 datetime 类型,当我插入行时,它的写法像 2011-10-01 15:16:09 它正确没问题,但在我查询和回显时在 php 端日期时间 echo strftime("%d %b %Y, %a %H:%M",strtotime(date("m/d/Y H:i",$data['UNIX_TIMESTAMP(date)']))); 我把时间提前一小时,比如 16:16:09

我不明白如何弄清楚。有什么想法吗?

编辑: 插入行时,我将日期提供给 mysql,它不使用内部日期信息,如 CURRENT_TIMESTAMP

【问题讨论】:

  • $data['UNIX_TIMESTAMP(date)'] 中的值是多少? 1317471369?
  • 是的@salathe 就像 1317471369 Mysql 将日期时间转换为时间戳格式,所以我在 php 日期函数中使用它来创建该日期和时间。但不知何故它提前了一小时
  • 但它是 1317471369还是实际上是1317471369?
  • 另外,你为什么要从unix时间戳到格式化日期,再到unix时间戳,再到格式化日期?为什么不只是strftime("…", $data[…])
  • @salathe 你是对的。首先,我打算按照您的建议这样做,但我不想为爆炸日期时间而苦苦挣扎,以格式化我需要的格式:)有时首先想到的是正确答案;)

标签: php mysql timezone unix-timestamp


【解决方案1】:

这个问题几乎可以肯定是由于夏令时。如果代码的一部分指定 +3,则已针对夏令时进行了更正。如果代码的另一部分没有将日期识别为夏令时的正确日期,它将增加一个小时。

我知道这不是一个很好的答案,但我似乎还不能发表评论。

【讨论】:

    猜你喜欢
    • 2010-10-02
    • 1970-01-01
    • 2011-10-01
    • 2019-03-24
    • 2012-09-17
    • 2013-06-03
    • 1970-01-01
    • 1970-01-01
    • 2010-10-16
    相关资源
    最近更新 更多