【问题标题】:How to convert unix time parsed as MM/DD/YYYY to DD/MM/YYYY unix date如何将解析为 MM/DD/YYYY 的 unix 时间转换为 DD/MM/YYYY unix 日期
【发布时间】:2014-06-22 14:20:07
【问题描述】:

我已经将一大堆日期字符串转换为 unix 时间戳(自纪元以来的毫秒数)。

我使用了 moment.js 日期库,它做得很好,除了有一个误解。在澳大利亚,日期通常以 DD/MM/YYYY 格式表示,但美国日期是 MM/DD/YYYY,而 moment 似乎假定我解析的日期是美国格式。

这导致诸如 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 的日期。

我在这里做错了什么。我如何才能实现这种转变?

【问题讨论】:

  • 我真的不认为你可以。这里的重点是损害已经造成。真正的担心是您的“日”值不会超过 12。我本来预计该功能会失败,这可能会给您当时的线索。但是,如果它实际上只是回落到可能的最高值,那么您似乎已经完成了。您最好的选择是尝试使用字符串恢复信息并重新开始。始终有备份。
  • 对不起各位,我已经意识到这实际上是一个不可能的问题。
  • 我会在 8 小时后更新问题。堆栈溢出不会让我更新我的问题。
  • 我发错了答案,对不起,没有t mind that its 真的不可能的问题
  • 雷米。既然所有答案都已删除,您应该可以删除它。祝你确定日期好运。

标签: javascript mongodb momentjs


【解决方案1】:

这实际上是一个不可能的问题。这是因为月份部分中大于 12 的值将流入年份。

'01-01-2012' -> x

'01-13-2011' -> x

'01-25-2010' -> x

有无穷大的日期字符串可以针对任何给定的 unix 时间戳进行评估。因此,您无法知道原始日期字符串是什么。这使得无法将时间戳值更改为以不同方式解析时的值。

此类问题的公平警告,请存储原始日期字符串。如果您出于某种原因需要将日期存储为数字,那也没关系 - 也可以存储原始日期。

【讨论】:

    猜你喜欢
    • 2013-10-19
    • 2018-08-24
    • 2022-08-03
    • 1970-01-01
    • 1970-01-01
    • 2023-03-26
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    相关资源
    最近更新 更多