2

这是问题的复制:

我通过 JavaScript 得到现在的时间戳

var ts = +new Date // 1368971991090
console.log( new Date(1368971991090) ); // Sun May 19 2013 13:59:51 GMT+0000 (GMT)
然后在我的 Postgres 控制台中,

# select to_timestamp(1368971991090);
          to_timestamp          
--------------------------------
 45350-12-30 05:31:29.999872+00
(1 row)

约会太远了。
JavaScript 的文档Date#getTime说它从纪元开始返回毫秒;与Postgres 的参数类型一样to_timestampaccept。Java 的Date#getTime返回值与 JS 相同Date#getTime

4

2 回答 2

7

从您的链接引用postgresql doc:

它接受一个双精度参数并从 Unix 纪元(自 1970-01-01 00:00:00+00 以来的秒数)转换为带有时区的时间戳。

钥匙 -

秒后

在 JS 文档中:

自 1970 年 1 月 1 日 00:00:00 UTC 以来的毫秒数

于 2013-05-19T15:04:04.813 回答
0

不知道这是否对任何人有帮助,但我最近遇到了同样的问题。解决方案是将 JS 时间戳转换为自纪元以来的秒数,而不是毫秒。

const millisecondsSinceEpoch = Date.now();
// output: 1631828038018
const secondsSinceEpoch = Math.round(Date.now() / 1000);
// output: 1631829225

在 Postgres 中:

SELECT to_timestamp(1631828038018);
// output: 53680-07-27 14:06:57.999872

SELECT to_timestamp(1631829225);
// output: 2021-09-16 22:53:45+01
于 2021-09-16T22:03:55.413 回答