我有一个用户可以发表评论的博客。我插入他们发表评论的时间NOW()
,然后使用date('j M Y', stored timestamp)
来显示他们发表评论的时间。
我想知道 NOW() 是否返回locatime of the end user or the localtime at my server
. UNIX_TIMESTAMP
它是否比NOW()
计算用户发表评论的本地时间更适合使用。
我有一个用户可以发表评论的博客。我插入他们发表评论的时间NOW()
,然后使用date('j M Y', stored timestamp)
来显示他们发表评论的时间。
我想知道 NOW() 是否返回locatime of the end user or the localtime at my server
. UNIX_TIMESTAMP
它是否比NOW()
计算用户发表评论的本地时间更适合使用。
该函数NOW()
生成一个格式化的日期时间字符串,由 MySQL 服务器的时区决定。
但是,最好使用UNIX_TIMESTAMP()
GMT 来存储时间。这样做可以更轻松地根据访问者所在的国家/地区对其进行格式化(例如,使用 JavaScript)。
如果您仍想使用DATETIME
列,则可以使用存储时间UTC_TIMESTAMP()
(它格式化日期,NOW()
但以 UTC 表示);它应该在所有其他方面或多或少地工作相同。
UNIX_TIMESTAMP()
如果没有传递参数,MySQL会返回自 '1970-01-01 00:00:00' UTC 以来的 Unix 时间戳(以秒为单位)作为无符号整数UNIT_TIMESTAMP().
当此函数与日期参数一起使用时,它将参数的值作为自 '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 |
+---------------------+-----------------------+
让我们看看手册对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 以来的秒数。date 可以是 DATE 字符串、DATETIME 字符串、TIMESTAMP 或格式为 YYMMDD 或 YYYYMMDD 的数字。服务器将日期解释为当前时区的值,并将其转换为 UTC 的内部值。
因此,首先,它们返回不同的东西:正确的日期与整数。
您实际上需要获得三个功能:
日期和时间函数一章提供了可用函数的摘要。如果你想以 UTC 存储日期,你会去UTC_TIMESTAMP()。如果你想使用服务器的时区,你可以使用NOW()。并且有CONVERT_TZ()进行转换。
然而,MySQL 不会帮助您解决第 2 点。您需要询问用户或使用 JavaScript 读取用户的时钟并将其发送到服务器以便您猜测(如果您不询问,您将始终需要猜测,因为通常有几个时区共享相同给定瞬间的时间)。