使用 MomentJS 将 ISO 8601 转换为不同的 ISO 8601 格式

Convert ISO 8601 to a different ISO 8601 format using MomentJS

有没有办法像这样的格式:

2003-09-25T14:00:00.000+1000 or 2003-09-25T14:00:00.000+1100

要这样转换

2003-09-25T14:00:00.000Z

不使用手册,只使用 MomentJS。我也想知道 +1000 或 +1100 是什么意思。

可以获取偏移时间并将它们添加回时间。

var timeStrings = [
  '2003-09-25T14:00:00.000+1000',
  '2003-09-25T14:00:00.000+1100'
];

console.log(timeStrings.map(ts => {
  var m = moment(ts);
  m.add(m._tzm, 'minutes'); // Add total minute offset
  return m.toISOString();
}));
.as-console-wrapper { top: 0; max-height: 100% !important; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js"></script>


显示时不修改时刻对象的替代方法。

var timeStrings = [
  '2003-09-25T14:00:00.000+1000',
  '2003-09-25T14:00:00.000+1100'
];
var moments = timeStrings.map(ts => moment(ts));

// The moments are not modified when displayed...
console.log(moments.map(momentDateAsUtc));

function momentDateAsUtc(m) {
  var clone = m.clone();
  clone.add(m._tzm, 'minutes'); // Add total minute offset
  return clone.toISOString();
}
.as-console-wrapper { top: 0; max-height: 100% !important; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js"></script>

如果你想要以 UTC 显示时间,实际上没有什么可做的,因为 momentjs 已经在内部处理 UTC 时间,在解析它们时将偏移日期转换为 UTC :

var moments = [
  moment('2003-09-25T14:00:00.000+1000'), // 2PM in Srednekolymsk, Russia
  moment('2003-09-25T14:00:00.000+1100')  // 2PM in Sydney, Australia
]; // Note that they are NOT the same time, nor are they the same as 14:00:00Z
console.log(moments);
.as-console-wrapper { top: 0; max-height: 100% !important; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js"></script>