我已经将一堆日期字符串转换为unix时间戳(从时代开始就是毫秒)。
我使用了moment.js日期库,它做得很好,除了有一个误解。在澳大利亚,日期通常以DD/MM/YYYY格式表示,而美国日期是MM/DD/YYYY,而矩似乎假定我分析的日期是美国格式的。
这导致将诸如2000年10月1日这样的日期解析为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的日期。
我在这里做错什么了。我如何才能实现这一转变?
发布于 2014-05-07 01:16:41
这其实是一个不可能的问题。这是因为月份部分中大于12的数值将流入一年。
'01-01-2012‘-> x
'01-13-2011‘-> x
'01-25-2010‘-> x
对于任何给定的unix时间戳,都可以计算无穷大的日期字符串。因此,您无法知道原始的日期字符串是什么。这使得不可能将时间戳值更改为如果以不同的方式解析它的值。
使用这类问题进行公平警告,存储原始日期字符串。如果由于某种原因需要将日期作为一个数字存储,那么也不重要--也要存储原始日期。
https://stackoverflow.com/questions/23486745
复制相似问题