You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript与Postgres Epoch时间戳差异原因排查求助

问题根源:JavaScript的月份索引从0开始!

这是JS Date对象最容易踩的坑之一,你的两段代码其实对应的不是同一个日期:

  • 在JavaScript中,new Date(2018, 3, 1)里的月份参数是0-based(从0开始计数)的,所以3对应的是4月,而不是3月!这个日期实际是2018-04-01 00:00:00(时区+2),转换成时间戳1522533600完全正确。
  • 而PostgreSQL的TIMESTAMP WITH TIME ZONE '2018-03-01 00:00:00'明确指定的是3月1日,时区+2下对应的epoch时间1519858800.0也是正确的。

验证一下:

把JS代码改成3月的正确写法,结果就会和PG一致了:

new Date(2018, 2, 1).getTime() / 1000;
// 输出:1519858800,和PG的结果完全匹配

额外补充:

如果想避免这种月份索引的混乱,在JS里建议使用ISO格式的字符串来创建日期,比如:

new Date('2018-03-01T00:00:00+02:00').getTime() / 1000;
// 同样会得到1519858800

这样就不会再因为月份的0-based索引踩坑啦!

内容的提问来源于stack exchange,提问作者port5432

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 02:23:20