Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL中UNIX_TIMESTAMP和NOW()的区别_Mysql_Date_Unix Timestamp - Fatal编程技术网

MySQL中UNIX_TIMESTAMP和NOW()的区别

MySQL中UNIX_TIMESTAMP和NOW()的区别,mysql,date,unix-timestamp,Mysql,Date,Unix Timestamp,我有一个用户可以发表评论的博客。我使用NOW()插入他们发表评论的时间,然后使用date('jmmy',存储的时间戳)显示他们发表评论的时间 我想知道NOW()是否返回最终用户的位置或我服务器上的localtime。 使用UNIX\u TIMESTAMP比NOW()更适合计算用户发表评论的本地时间。函数NOW()生成一个格式化的日期时间字符串,该字符串由MySQL服务器的时区确定 但是,最好使用UNIX\u TIMESTAMP()(以GMT表示)存储时间。这样做可以更容易地根据访问者的国家/地区

我有一个用户可以发表评论的博客。我使用
NOW()
插入他们发表评论的时间,然后使用
date('jmmy',存储的时间戳)
显示他们发表评论的时间

我想知道NOW()是否返回最终用户的
位置或我服务器上的localtime
。 使用
UNIX\u TIMESTAMP
NOW()
更适合计算用户发表评论的本地时间。

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

但是,最好使用
UNIX\u TIMESTAMP()
(以GMT表示)存储时间。这样做可以更容易地根据访问者的国家/地区设置时间格式(例如,使用JavaScript)


如果仍要使用
DATETIME
列,则可以使用
UTC\u TIMESTAMP()
存储时间(它将日期格式化为
NOW()
,但以UTC表示);它在所有其他方面都应该或多或少地起到相同的作用。

让我们看看手册中有哪些内容:

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

。。。以及:

如果在没有参数的情况下调用,将返回Unix时间戳(秒) “1970-01-01 00:00:00”UTC)作为无符号整数。如果UNIX_时间戳() 使用日期参数调用,则返回参数的值 自UTC“1970-01-01 00:00:00”以来的秒数。日期可以是日期字符串, 日期时间字符串、时间戳或YYMMDD或YYMMDD格式的数字 YYYYMMDD服务器将日期解释为当前时间的值 分区并将其转换为UTC的内部值。

因此,首先,它们返回不同的内容:正确的日期和整数

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

  • 以相同格式存储所有日期(UTC或服务器时区)
  • 获取用户的时区
  • 在用户时区中显示存储的日期
  • 本章概述了可用的功能。如果您想在UTC中存储日期,您可以选择。如果要使用服务器的时区,可以使用。还有一种方法是进行转换

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

    MySQL
    UNIX\u TIMESTAMP()
    如果未使用
    UNIT\u timestamp()传递参数,则返回自UTC“1970-01-01 00:00:00”以来的Unix时间戳(以秒为单位),该时间戳为无符号整数。

    当此函数与日期参数一起使用时,它将以无符号整数的形式返回参数值,以秒为单位,从UTC“1970-01-01 00:00:00”开始计算

    参数可以是日期、日期时间、时间戳或YYYYMMDD或YYMMDD中的数字

    注意:由于
    UNIX\u TIMESTAMP()
    在当前日期时间工作,因此您的输出可能与显示的输出不同

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

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

    现在我该如何使用javascript计算用户所在国家/地区。我知道如何计算gmt,但country@jackthis将如何根据用户的国家打印日期
    date('jMy',存储的时间戳)
    UNIX\u timestamp()
    返回一个整数。您是否建议转储
    DATETIME
    列以支持
    INT
    ?@RayZ JavaScript可以通过执行
    new Date(*1000)
    轻松实现这一点,您可以获得偏移量-请参阅