返回
从 Moment.js 中获取 UTC 格式日期的 2 个技巧
前端
2023-12-09 22:46:09
当我们使用 Moment.js 将日期转换为 UTC 格式时,可能会遇到以下 2 个小问题:
问题 1:utc() 方法不改变原始日期对象
Moment.js 的 utc()
方法不会改变原始日期对象,而是返回一个新的日期对象。这意味着,如果您使用 utc()
方法转换一个日期对象,然后对其进行修改,原始日期对象不会受到影响。
const date = moment('2021-11-01T19:39:00.000');
const utcDate = date.utc();
utcDate.add(1, 'day');
console.log(date.format()); // "2021-11-01T19:39:00.000Z"
console.log(utcDate.format()); // "2021-11-02T19:39:00.000Z"
在上面的示例中,我们使用 utc()
方法将日期对象 date
转换为 UTC 格式,然后使用 add()
方法将 utcDate
增加一天。但是,当我们打印 date
时,它的值仍然是原始的日期,即 2021-11-01T19:39:00.000Z。这是因为 utc()
方法并没有改变原始的日期对象,而是返回了一个新的日期对象。
问题 2:使用 format() 方法时,需要显式指定 UTC 时区
当我们使用 format()
方法将日期对象转换为字符串时,需要显式指定 UTC 时区,否则 format()
方法将使用本地时区。
const date = moment('2021-11-01T19:39:00.000');
console.log(date.format()); // "2021-11-01T19:39:00.000-08:00"
console.log(date.utc().format()); // "2021-11-01T19:39:00.000Z"
在上面的示例中,我们使用 format()
方法将日期对象 date
转换为字符串,没有显式指定时区。因此,format()
方法使用本地时区,即太平洋标准时间 (PST),并将日期转换为字符串 "2021-11-01T19:39:00.000-08:00"。但是,当我们使用 utc()
方法将日期对象转换为 UTC 格式,然后再使用 format()
方法将它转换为字符串时,我们显式指定了 UTC 时区,因此 format()
方法将日期转换为字符串 "2021-11-01T19:39:00.000Z"。
为了避免上述问题,我们可以使用以下技巧:
- 使用
utc()
方法将日期对象转换为 UTC 格式后,再对其进行修改。 - 使用
format()
方法将日期对象转换为字符串时,显式指定 UTC 时区。
这样,就可以确保日期转换的准确性。