如何在JavaScript中获取正确的ISO格式日期?
问题解决:JavaScript Date时区转换导致日期偏移
问题原因
你创建的new Date(2023,4,25)是基于**本地时区(GMT+2)**生成的日期(5月25日0点),而toISOString()方法会将日期转换为UTC时区输出。由于UTC比你的本地时区晚2小时,所以本地的5月25日0点对应UTC的5月24日22点,这就是结果不符合预期的原因。
解决方案
方法1:创建UTC时区的Date对象
使用Date.UTC()生成UTC时区的时间戳,再以此创建Date对象:
let myDate = new Date(Date.UTC(2023, 4, 25)); myDate.toISOString(); // 返回 "2023-05-25T00:00:00.000Z"
Date.UTC(2023,4,25)直接生成UTC时区2023年5月25日0点的时间戳,基于这个时间戳创建的Date对象,调用toISOString()会输出你期望的UTC时间字符串。
方法2:直接构造ISO格式字符串
如果只需要最终的字符串结果,无需操作Date对象,可以手动拼接符合ISO标准的字符串:
const year = 2023; const month = String(5).padStart(2, '0'); // 这里用实际月份1-12,无需减1 const day = String(25).padStart(2, '0'); const targetISOString = `${year}-${month}-${day}T00:00:00.000Z`; // targetISOString 即为 "2023-05-25T00:00:00.000Z"
内容的提问来源于stack exchange,提问作者Peter
相关产品推荐
相关产品推荐

