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

标签 javascript sqlite date

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

相关文章:

javascript - Firefox 中的日期无效

javascript - 如何从禁用的 <input> 元素中获取表单值

javascript - 使用 DOM 绘制钟摆

javascript - 这段 JavaScript 代码是什么类型的数据?

Android SQLite 如何使用 Foreign KEY 插入值

javascript - 从 Firebase、angularJS 检索日期

javascript - 如何在特定时间和日期运行功能?

javascript - 使背景位置可变

json - Bash sqlite3 行 |如何转换成JSON格式

java - 方言 SQLite 3 与 Hibernate 5 的问题