没有修改日期的时刻toISOstring

时间:2016-09-01 15:37:04

标签: momentjs

我的日期类似于"星期四2016年01月1日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

这比我预期的时间晚了一天。那么我该怎样做才能忽略我当地的时区并将其视为UTC?

编辑: 预期的输出是

2016-09-01T18:30:00.000Z

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

2 个答案:

答案 0 :(得分:2)

发生这种情况的原因: 发生这种情况是因为 .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>

答案 1 :(得分:0)

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

这是解决方案: 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));

测试执行:

Test Execution

时刻文档:MomentJs