【问题标题】:Difference between UNIX_TIMESTAMP and NOW() in MySQLMySQL 中 UNIX_TIMESTAMP 和 NOW() 的区别
【发布时间】:2013-01-28 18:49:14
【问题描述】:

我有一个用户可以发表评论的博客。我使用NOW() 插入他们发表评论的时间,然后使用date('j M Y', stored timestamp) 显示他们发表评论的时间。

我想知道 NOW() 是否返回 locatime of the end user or the localtime at my server。 使用UNIX_TIMESTAMP 是否比NOW() 更适合计算用户发表评论的当地时间。

【问题讨论】:

  • this 可能有帮助

标签: mysql date unix-timestamp


【解决方案1】:

NOW() 函数生成一个格式化的日期时间字符串,由 MySQL 服务器的时区决定。

但是,最好使用UNIX_TIMESTAMP() 存储时间,它以格林威治标准时间表示。这样做可以更轻松地根据访问者所在的国家/地区对其进行格式化(例如,使用 JavaScript)。

如果您仍想使用DATETIME 列,您可以使用UTC_TIMESTAMP() 存储时间(它的格式类似于NOW(),但用UTC 表示);它应该在所有其他方面或多或少地工作相同。

【讨论】:

  • 那么现在我如何使用 javascript 计算用户所在的国家/地区。我知道要计算格林威治标准时间但国家如何@Jack
  • 这会根据用户所在国家/地区打印日期吗date('j M Y', stored timestamp)
  • UNIX_TIMESTAMP() 返回一个整数。您是否建议转储 DATETIME 列以支持 INT
  • @RayZ JavaScript 可以通过 new Date(<timestamp-from-db> * 1000) 轻松做到这一点
  • 你可以获得偏移量 - 见stackoverflow.com/questions/1194933/…
【解决方案2】:

如果没有使用UNIT_TIMESTAMP(). 传递参数,MySQL UNIX_TIMESTAMP() 会以无符号整数形式返回自 UTC 时间 '1970-01-01 00:00:00' 以来的 Unix 时间戳(以秒为单位)

当此函数与日期参数一起使用时,它将参数的值作为无符号整数返回,以自 '1970-01-01 00:00:00' UTC 起的秒数为单位。

参数可以是 DATE、DATETIME、TIMESTAMP 或 YYYYMMDD 或 YYMMDD 中的数字。

注意:由于UNIX_TIMESTAMP() 适用于当前日期时间,因此您的输出可能与显示的输出不同。

NOW() 返回当前日期和时间。

SELECT NOW(), UNIX_TIMESTAMP(NOW());
+---------------------+-----------------------+
| NOW()               | UNIX_TIMESTAMP(NOW()) |
+---------------------+-----------------------+
| 2011-10-03 10:22:37 |            1317666157 |
+---------------------+-----------------------+

【讨论】:

    【解决方案3】:

    让我们看看手册对NOW() 有什么说法:

    返回当前日期和时间作为 'YYYY-MM-DD HH:MM:SS' 中的值 或者 YYYYMMDDHHMMSS.uuuuuu 格式,取决于函数是否 在字符串或数字上下文中使用。 该值以 当前时区

    ...和UNIX_TIMESTAMP():

    如果不带参数调用,返回 Unix 时间戳(自 '1970-01-01 00:00:00' UTC)作为无符号整数。如果 UNIX_TIMESTAMP() 使用日期参数调用,它返回参数的值 自 '1970-01-01 00:00:00' UTC 以来的秒数。日期可能是一个日期字符串, DATETIME 字符串、TIMESTAMP 或格式为 YYMMDD 的数字或 YYYYMMDD。 服务器将日期解释为当前时间的值 zone 并将其转换为 UTC 的内部值。

    因此,首先,它们返回不同的东西:正确的日期与整数。

    您实际上需要获得三个功能:

    1. 以相同的格式(UTC 或服务器的时区)存储所有日期
    2. 获取用户的时区
    3. 在用户的时区显示存储的日期

    Date and Time functions 章节提供了可用功能的摘要。如果你想以 UTC 存储日期,你会选择UTC_TIMESTAMP()。如果你想使用服务器的时区,你可以使用NOW()。还有CONVERT_TZ() 进行转换。

    然而,MySQL 无法帮助您解决第 2 点。您需要询问用户或使用 JavaScript 读取用户的时钟并将其发送到服务器以便您猜测(如果您不询问,您将始终需要猜测,因为通常有几个时区共享相同给定瞬间的时间)。

    【讨论】:

      猜你喜欢
      • 2014-07-31
      • 2012-04-14
      • 2012-07-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-14
      相关资源
      最近更新 更多