【问题标题】:mysql UNIX_TIMESTAMP returns incorrect valuemysql UNIX_TIMESTAMP 返回不正确的值
【发布时间】:2012-04-16 11:24:55
【问题描述】:

我在 mysql 中有以下日期存储在 DATETIME 字段中:

2012-04-16 16:21:54

比我这样选择它:

SELECT UNIX_TIMESTAMP(date) ....

但如果我使用 php 日期函数打印小时,我会得到一小时的差异:

echo date("H:i:s", $row->date)

将打印:

17:21:54

没有第二个参数,日期函数返回正确的值。有什么想法吗?

【问题讨论】:

  • date() 函数会在显示之前将日期转换为服务器时间。一小时的差异可能是预期的结果。
  • 数据库和网络服务器一样吗?如果它们不同,它们是否具有相同的时区?

标签: php mysql


【解决方案1】:

根据mysql手册-

UNIX_TIMESTAMP(), UNIX_TIMESTAMP(date)

如果不带参数调用,则以无符号整数形式返回 Unix 时间戳(自 '1970-01-01 00:00:00' UTC 以来的秒数)。如果使用日期参数调用 UNIX_TIMESTAMP(),它会返回参数的值作为自 '1970-01-01 00:00:00' UTC 以来的秒数。 date 可以是 DATE 字符串、DATETIME 字符串、TIMESTAMP 或格式为 YYMMDD 或 YYYYMMDD 的数字。服务器将日期解释为当前时区的值,并将其转换为 UTC 的内部值。客户端可以按照第 10.6 节,“MySQL 服务器时区支持”中的描述设置他们的时区。

【讨论】:

  • 这如何回答这个问题?
  • 我把这条线加粗了。这解释了原因。
  • 谢谢,这是正确的答案。运行 SET @@global.time_zone = 'America/New_York';查询解决问题!
【解决方案2】:

通过添加“e”,您可以获得该时间戳的时区。

这可能与不同的时区有关。尝试使用http://www.php.net/manual/en/function.date-timezone-set.php

如果这不起作用,请探索日期函数的其余部分: http://php.net/manual/en/book.datetime.php

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-11
    相关资源
    最近更新 更多