【问题标题】:moment toISOstring without modifying date时刻到ISOstring而不修改日期
【发布时间】:2016-09-01 15:37:03
【问题描述】:

我有一个类似“Thu Sep 01 2016 00:00:00 GMT+0530 (IST)”的日期,我需要将其作为 ISO-8601 UTC 时间发送到服务器。我试过了:

moment(mydate).toISOString()

moment.utc(mydate).toISOString()

moment(mydate).utcOffset("+00:00").toISOString() 

但我得到的结果是

2016-08-31T18:30:00.000Z

这比我预定的时间晚了 1 天。那么我该怎么做才能让 moment 忽略我的本地时区并将其视为 UTC?

编辑: 预期的输出是

2016-09-01T18:30:00.000Z

不,初始输入不是字符串,而是 javascript “new Date()” 值。

【问题讨论】:

  • 那是因为它在 UTC 配对期间应用了 GMT 偏移量。您需要重写您声明为 UTC 的日期吗?那么字符串是否将 GMT+0530 等部分替换为 UTC?还是我不明白你想在这里完成什么?
  • 我认为您想要的是在解析日期时忽略偏移字段。试试这篇博文:maggiepint.com/2016/05/14/moment-js-shows-the-wrong-date
  • 请澄清 - 输入是 Date 对象,在登录到控制台或调用 .toString() 时仅具有该字符串表示形式?或者输入实际上是String?另外,您能否编辑您的问题以显示您想要的预期输出?

标签: momentjs


【解决方案1】:

发生这种情况的原因: 发生这种情况是因为 .toISOString() 以 UTC 格式返回时间戳,即使相关时刻处于本地模式。这样做是为了提供与原生 JavaScript Date .toISOString() 规范的一致性

解决方案: 使用相同的函数并将真值传递给它。这将阻止 UTC 转换。 moment(date).toISOString(true)

const date = new Date("2020-12-17T03:24:00");
const dateISOStringUTC = moment(date).toISOString();
const dateISOString = moment(date).toISOString(true);

console.log("Converted to UTC:" + dateISOStringUTC)
console.log("Actual Date value:" + dateISOString)
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js"></script>

【讨论】:

    【解决方案2】:

    我今天遇到同样的问题并找到了解决方案。

    解决方案如下:moment(date,moment.ISO_8601)

      var date = new Date();
      console.log("Original Date");
      console.log(date);
      console.log("After Moment Format");
      console.log(moment(date,moment.ISO_8601));
    

    测试执行:

    时刻文档:MomentJs

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-12
      • 1970-01-01
      • 2011-12-13
      相关资源
      最近更新 更多