我将字符串日期解析为MongoDB,并将其存储在UTC中,并且现在显示在前一天的当前TZ中

时间:2019-01-23 20:16:04

标签: node.js mongodb parsing time timezone

我目前正在研究NodeJS和MongoDB中的解决方案,它要求我通过API集成到第三方解决方案。我猜想,API多年来是由不同的人开发的,似乎没有某种标准。

我遇到的日期麻烦是我要么以未声明TZ的字符串形式接收它们(稍后会出现问题),要么是MongoBD拒绝通过$ toDate转换的EPOCH(我猜是数字我收到的与MongoDB的计算方式不同)。

例如:

{
    "_id" : ObjectId("5c3508a9d2477df82702630d"),
    "date" : 1535684400,
    "string_date" : "2018-08-31",
} 

现在,我知道我在日期字段上缺少三个零,因为如果您尝试按现在的方式来“ new Date(1538449200)”,Mongo会给您一些1970年的Date和new Date (1535684400000)将输出正确的日期。

这种不便之处显然已经解决了,我尝试使用Moment和其他技巧将其正确显示在前端并坚持使用“ string_date”键,但是我觉得这不是解决方案,只是暂时的解决方案,所以我仍然没有想出一个不需要我担心的长期解决方案。

因为我已经自动化了数据提取,所以我想对它进行修补,但是由于我正在提取并使用Mongo的批量功能来最大程度地减少处理需求,所以我真的不喜欢只迭代数千条记录加三个零。

如果我将API中的string_date强制为Date,会发生什么事情,那就是TimeZone丢失了,并且停留在T00:00:00.000Z日期,这意味着当我看到它带有负时区时,则日期滞后一天。

{
    "_id" : ObjectId("5c3508a9d2477df82702630d"),
    "date" : 1535684400,
    "string_date" : ISODate("2018-08-31T00:00:00.000Z")
}

有人遇到过类似的事情或有解决这个小问题的方法吗?我已经开始考虑解决此问题的唯一真正解决方案是处理数据以确保其具有正确的零值,我一直在使用Google搜索功能,并且看到有些人在Mongoose上运行创建后函数(因为批量功能不是Mongoose提供的,所以我不知道它是否对我有用,而且运行调度任务来固定小时数还不够快,因为我一直在不断地生成新数据我从API批量接收。

注意:仅在我的日期字段中添加三个0是不够的,因为我记得其他一些对象甚至都没有给我EPOCH日期,并且我只在String上保留了日期。 / p>

0 个答案:

没有答案