在MySQL中UNIX_TIMESTAMP和NOW()之间的区别(Difference betwee

2019-08-16 22:40发布

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

我想知道它NOW()返回locatime of the end user or the localtime at my server 。 它是更适合于使用UNIX_TIMESTAMPNOW()来计算,在该用户发布的评论的本地时间。

Answer 1:

函数NOW()生成一个格式化的日期-时间字符串,通过你的MySQL服务器的时区来确定。

然而,这将是更好的存储使用时间UNIX_TIMESTAMP()这是在格林尼治标准时间表示。 这样做可以更容易地按照顾客的(使用JavaScript EG)全国格式化。

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



Answer 2:

MySQL的UNIX_TIMESTAMP()如果没有参数与通过返回秒Unix时间戳因为“1970-01-01 00:00:00” UTC为无符号整数UNIT_TIMESTAMP().

当与日期参数中使用这一功能,它返回自“1970-01-01 00:00:00” UTC参数作为以秒为一个无符号的整数的值。

参数可以是一个DATE,DATETIME,时间戳或在YYYYMMDD或YYMMDD一个数字。

注:由于UNIX_TIMESTAMP()适用于当前日期时间,你的输出可以从显示的输出会有所不同。

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

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


Answer 3:

让我们来看看手册不得不说的NOW() :

返回当前日期和时间作为一个值取决于函数是否用在字符串或数字语境中或YYYYMMDDHHMMSS.uuuuuu格式,“YYYY-MM-DD HH:SS:MM”。 该值在当前时区表示

...和UNIX_TIMESTAMP() :

如果不带参数调用, 返回一个Unix时间戳 (秒因为“1970-01-01 00:00:00” UTC)作为无符号整数。 如果UNIX_TIMESTAMP()被调用与日期的说法,它返回自“1970-01-01 00:00:00” UTC参数为秒的值。 日期可以是DATE字符串,一个DATETIME字符串,时间戳,或在格式YYMMDD或YYYYMMDD一个数字。 所述服务器解释日期在当前时区中的值,并将其转换为在UTC的内部值。

因此,首先,它们返回不同的东西:一个适当的日期与整数。

实际上,你需要得到三个特点:

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

该日期和时间函数一章提供了可用功能的摘要。 如果你想存储UTC日期,你会去UTC_TIMESTAMP() 。 如果你想使用服务器的时区,你可以使用NOW() 。 还有的CONVERT_TZ()进行转换。

MySQL的,但不会帮助你与点#2。 您需要可以询问用户或者使用JavaScript来读取用户的时钟,并将其发送到服务器,这样你可以猜测(如果你不问你总是需要猜测,因为是共享相同通常几个时区在给定时刻的时间)。



文章来源: Difference between UNIX_TIMESTAMP and NOW() in MySQL