我正在尝试使用节点将旧的 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/