gpt4 book ai didi

javascript - Sqlite 时间戳到 javascript 日期对象

转载 作者:行者123 更新时间:2023-12-02 17:21:55 28 4
gpt4 key购买 nike

我正在尝试使用节点将旧的 sqlite 数据库导入到 mongodb,该数据库有几个日期字段,我无法获取正确的数据,例如:

370735200 -> 应该是 2012/10/01 00:00:00 但它显示:

Wed Sep 30 1981 23:00:00 GMT+0100 (CEST)

我正在这样做:

   var originalDate = Math.round (new Date(data.origDate * 1000))

另一个示例 360540000 -> 应该是 2012/06/05 00:00:00 但它显示:

Fri Jun 05 1981 00:00:00 GMT+0200 (CEST)

SQLite 数据库中的日期字段具有类型:时间戳

也许有人可以建议或建议一些节点模块来处理这个问题。

已编辑,添加信息:

我被告知sqlite值来自NSDate,我看到了文档:NSDate的唯一原始方法“timeIntervalSinceReferenceDate”为NSDate接口(interface)中的所有其他方法提供了基础。该方法返回相对于绝对引用日期——格林尼治标准时间 2001 年 1 月 1 日的第一时刻。”但我仍然想知道如何翻译才能获得正确的日期。

最佳答案

MongoDb(以及 sqlite3 中的日期函数)使用 1970 年 1 月 1 日的引用日期 ( http://en.wikipedia.org/wiki/Unix_time ),这就是您看到引用结果的原因:

sqlite> SELECT datetime(370735200, "unixepoch");
1981-09-30 22:00:00
sqlite> SELECT datetime(360540000, "unixepoch");
1981-06-04 22:00:00

如果您的数据使用不同的引用日期,您必须相应地偏移这些值:

sqlite> SELECT datetime(370735200 + strftime("%s", "2001-01-01"), "unixepoch");
2012-09-30 22:00:00
sqlite> SELECT datetime(360540000 + strftime("%s", "2001-01-01"), "unixepoch");
2012-06-04 22:00:00

(这些时间戳是 UTC,而您的时间戳有时区,这就是为什么与您期望的时间戳有 1 小时或 2 小时的差异)。

所以下面的公式应该有效:

var originalDate = Math.round (new Date((data.origDate + 978307200) * 1000))

关于javascript - Sqlite 时间戳到 javascript 日期对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23858385/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com