【问题标题】:Getting different timestamp in Mysql and Javascript for the same date?在同一日期在 Mysql 和 Javascript 中获取不同的时间戳?
【发布时间】:2014-04-24 15:39:02
【问题描述】:

在 Javascript 中

    new Date()
    Tue Mar 18 2014 18:54:17 GMT+0000 (GMT)
    Date.UTC(2014,03,18)
    1397779200000

在Mysql中

mysql> SELECT  NOW(), UTC_TIMESTAMP();
+---------------------+---------------------+
| NOW()               | UTC_TIMESTAMP()     |
+---------------------+---------------------+
| 2014-03-18 18:55:04 | 2014-03-18 18:55:04 |
+---------------------+---------------------+

mysql> select UNIX_TIMESTAMP('2014-03-18') ;
+------------------------------+
| UNIX_TIMESTAMP('2014-03-18') |
+------------------------------+
|                   1395118800 |

【问题讨论】:

  • JS 使用毫秒,unix 时间戳以秒为单位。其余的区别只是您在不同时间运行这两个代码的事实,例如3 月 18 日上午 9 点 07 分上午 9:08:31 或其他任何时间。实际上,您不太可能从两者获得相同的时间戳,因为 JS 和 MySQl 是在不同地方运行的完全不同的系统。
  • 我不能在特定日期从两个地方获得相同的 UTC 时间戳吗?
  • 你是。但由于您没有为任一时间戳指定 h/m/s,因此在您运行代码时,两个系统都在提取当前时间的 h/m/s。

标签: javascript mysql date timezone


【解决方案1】:

有三个区别:

  1. Date.UTC() 以 UTC 解释其参数,而 UNIX_TIMESTAMP() 以数据库会话的时区解释其参数。从更新到您的问题看来,这可能没有任何影响,因为数据库会话的本地时区可能是 UTC。

  2. Date.UTC() 返回自 UNIX 纪元以来以毫秒为单位的值,而 UNIX_TIMESTAMP() 返回自 UNIX 纪元以来的秒数:因此它们始终相差 1000 倍。

    李>
  3. Date.UTC() 的月份参数是零索引的,因此 03 的值表示四月,而UNIX_TIMESTAMP() 的日期字面量表示三月。

参考文献如下。

JavaScript

Date.UTC() 中所述(强调添加):

UTC 函数与 Date 构造函数有两个不同之处:它以数字形式返回 time value,而不是创建 Date 对象,以及 它以 UTC 格式而不是本地解释参数时间

另外,如 TimeClip() 中所述(强调添加):

TimeClip 运算符根据其参数计算毫秒数,该参数必须是 ECMAScript 数值。

另外,如Month Number 中所述:

月份由 0 到 11 范围内的整数标识。

[ deletia ]

月份值 0 指定一月; 1 指定二月; 2 指定三月; 3 指定四月; 4 指定五月; 5 指定六月; 6 指定七月; 7 指定八月; 8 指定九月; 9 指定十月; 10 指定 11 月;和 11 指定 12 月。

MySQL

UNIX_TIMESTAMP(<strong><em>date</em></strong>) 中所述(强调):

如果使用日期参数调用 UNIX_TIMESTAMP(),它会返回自 '1970-01-01 00:00:00' UTC 以来的 参数值。服务器将 date 解释为 当前时区 的值,并将其转换为 UTC 的内部值。客户可以按照Section 10.6, “MySQL Server Time Zone Support” 中的说明设置他们的时区。

【讨论】:

  • @krunalshah:还要注意在 JavaScript months are indexed from zero 中,不是一个。因此,Date.UTC(2014,03,18) 实际上是 2014 年 4 月 18 日,而不是 3 月 18 日。
  • 我已将我的 mysql 数据库时区更新为 UTC 以解决此问题。
猜你喜欢
  • 2021-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-13
  • 2019-10-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多