【问题标题】:Why is moment converting this date incorrectly? [duplicate]为什么时刻转换此日期不正确? [复制]
【发布时间】:2019-11-10 12:34:02
【问题描述】:

我有一个来自我的 dynamodb 的 GMT 日期和时间格式,我正在尝试使用 momentjs 将其转换为 EST 格式。

2019-06-27 20:00:43.156257

只要我将日期放入时刻,它就会将其转换为 +4 小时(当它应该是 -4 时)。

2019-06-28T00:00:43.156Z

我正在做的就是这个。

const dbdate = [value-from-db]
const momentdate = moment(dbdate);

我的输出如下:

数据库日期:2019-06-27 20:00:43.156257
时刻日期:2019-06-28T00:00:43.156Z

【问题讨论】:

  • 来自docs"请阅读:moment(...) 是本地模式。模糊输入(无偏移)假定为本地时间. 明确的输入(带偏移量)调整为当地时间。”

标签: javascript amazon-dynamodb momentjs


【解决方案1】:

您必须使用moment.utc() 而不是moment()

const dbdate = '2019-06-27 20:00:43.156257';
const momentdate = moment(dbdate);
const utcmomentdate = moment.utc(dbdate);


console.log('local: \n', momentdate);
console.log('utc: \n', utcmomentdate);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js"></script>

【讨论】:

    【解决方案2】:

    这里有两个问题:

    1) Moment 正在使用您的本地时区执行时区转换 - 请改用 moment.utc

    2)您的日期不是“官方”支持的格式 - 尽管实际上它足够轻松来解析您的字符串。理想情况下,它应该以正确的 ISO 8601 格式提供以避免任何兼容性问题。

    你可以试试这样的:

     const dbdate = '2019-06-27 20:00:43.156257'.split(' ');
     const momentdate = moment.utc(dbdate[0] + 'T' + dbdate[1] + 'Z');
     alert(momentdate);
    

    这是fiddle

    希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-13
      • 2021-06-10
      • 1970-01-01
      • 2021-12-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多