为何调用moment.startOf('day')会返回早1小时的UTC时间?
问题解答
首先确认:你对Z的理解完全正确,它代表该时间为UTC标准时间。
为什么startOf('day')会返回提前1小时的结果?
核心原因是moment的startOf('day')方法默认基于**你的本地时区(UTC+1)**计算当日起始时间,而非UTC时区。
具体逻辑拆解:
- 你传入的
2024-07-01T00:00:00.000Z是UTC时间,转换到你的本地时区(UTC+1)后为2024-07-01 01:00:00。 - 调用
startOf('day')时,moment会将这个本地时间调整到本地当日的起始时刻——即2024-07-01 00:00:00(UTC+1)。 - 最后通过
toISOString()转换回UTC标准格式,这个本地起始时间对应的UTC时间就是2024-06-30T23:00:00.000Z,也就是你看到的结果。
如何得到预期的UTC当日起始时间?
如果要基于UTC时区计算当日起始,需要显式调用.utc()方法,让moment全程以UTC时区处理:
moment('2024-07-01T00:00:00.000Z').utc().startOf('day').toISOString(); // 返回结果:'2024-07-01T00:00:00.000Z'
内容的提问来源于stack exchange,提问作者kenwilde
相关产品推荐
相关产品推荐

