我已将整堆的datetring转换为unix时间戳(自纪元以来的毫秒数)。
我使用了moment.js日期库,除了有一个误解外,它做得很好。在澳大利亚,日期通常以DD / MM / YYYY格式表示,但是美国日期是MM / DD / YYYY,而且似乎假设我解析的日期是美国格式。
这导致诸如01/10/2000之类的日期被解析为1月10日而不是10月1日。我已将这些日期存储为代表纪元以来时刻的数字,因此上述日期已存储为970322400000
而不是947426400000
。
我想将我计算的所有日期转换为正确的值。对于错误计算的所有日期,我需要一个函数970322400000
并将其转换为947426400000
。由于其他情况,我无法从原始来源重新处理日期。
不幸的是 - 我必须在mongodb shell中运行它。
这是我已经尝试过的(文件顶部的时刻js的缩小来源)。
db.reminders.find()
.map(function(v) {
return {
id: v._id,
original: moment(v.reminderDate).format('YYYY-MM-DD'),
repaired: moment(moment(moment(v.reminderDate).format('MM-DD-YYYY'), 'DD-MM-YYYY').valueOf()).format('YYYY-MM-DD')
};
})
但是,我担心它不起作用。在输出的结果中,我找不到日期成分高于12的任何日期。
我在这里做错了什么。我怎么能够实现这种转变?
答案 0 :(得分:1)
这实际上是一个不可能的问题。这是因为月份中大于12的值将流入该年份。
' 2012年1月1日' - > x
' 2011年1月13日' - > x
' 2010年1月25日' - > x
有无穷大的日期字符串可以针对任何给定的unix时间戳进行评估。因此,您无法知道原始日期字符串是什么。这使得无法将时间戳值更改为以不同方式解析时的值。
有这些问题的公平警告,存储原始的日期字符串。如果由于某种原因需要将日期存储为数字并不重要 - 也可以存储原始数据。