我有一个 UTC 格式的日期“2020-06-19T03:55:12.000Z”。现在我正在将美国时区的日期转换为
let syncDate = moment(date, 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]')
.subtract(7, 'hours')
.format('YYYY-MM-DD[T]HH:mm:ss.SSS[Z]');
这给了我一个比美国日期晚 7 小时的日期。但我想要以下格式的日期
2020-06-18T21:00:24.523-07:00
在这里,如果我们可以看到时间被定义为-7,那么请指导我们如何实现相同的效果?
最佳答案
您无法从日期中提取时区,因为其中没有时区信息。你说“我正在转换为美国时区的日期”,但你没有。你刚刚减少了7个小时。时区仍然是 UTC。
您应该使用moment-timezone
(不要像@GetSet所说的那样以困难的方式和手动处理事情)。解决方案如下:
const moment = require('moment');
const tz = require('moment-timezone');
let date = moment('2020-06-19T03:55:12.000Z');
let syncDate = date.tz('America/Los_Angeles')
console.log(syncDate.format());
但是,我建议您使用Day.js
。代码将是:
const dayjs = require('dayjs');
const utc = require('dayjs/plugin/utc');
dayjs.extend(utc);
const dDate = dayjs('2020-06-19T03:55:12.000Z');
console.log(dDate.utcOffset(-7*60).format()); //2020-06-18T20:55:12-07:00
我过去使用过moment.js
。我尝试了 Date-fnd
24 小时。最后,我转到Day.js 。它是新的(从 2018 年底开始),但增长如此之快(take a look at this link 并将持续时间设置为 5 年)。它的伟大之处在于“它总是言出必行”。 Moment 和 Date-fns 则不然。 (不总是)。它使用包装器,因此您永远不会直接使用 Date 对象。它解决困难和问题。它是不可变的,并且总是返回一个新对象,并且您可以链接函数。 Day.js 的大小最小(2kB)。文档非常棒,您可以非常快速地启动和运行。 (其他库的工作方式更容易理解。)
这里我不得不说,Dayjs
在计算方面的性能不如Moment,但是在解析和格式化方面却比Moment要好得多。
我强烈建议您阅读这篇文章:Why you shouldn't use Moment.js
编辑(1):正如 @GetSet 在 OP 的评论中提到的,可能需要 Moment.js 中的解决方案,我将其添加到答案中。
编辑(2):添加无法按照OP解决问题的方式实现结果的原因。
关于javascript - 在 Javascript 中更改日期时区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62463175/