Sqlite时间戳到javascript Date对象

时间:2014-05-25 18:06:41

标签: javascript sqlite date

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

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

  

1981年9月30日星期三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接口中的所有其他方法提供了基础。此方法返回相对于绝对参考日期的时间值 - 2001年1月1日的第一个时刻,GMT。"但我仍然想知道如何翻译它以获得正确的日期。

1 个答案:

答案 0 :(得分:2)

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))