如何使用moment.js获取一天起止时间并转为Date对象,解决时区偏移问题
问题原因
- 核心原因是时区混淆:你代码中混用了UTC时区和本地时区的moment实例,生成的0点是UTC时区的0点,如果你所处时区为东七区,对应本地时间就是7点,这就是你看到T07:00的原因
- 代码存在语法错误:
startOf方法仅接受一个时间单位字符串参数,你写的local.startOf(1, 'day')是错误用法,无法得到预期的当天开始时间 - JS原生
Date对象本身没有时区属性,控制台打印时默认会显示UTC时间,如果你是按本地时间生成的0点,打印出来的UTC时间会比本地时间少对应时区偏移量,属于正常显示现象,不影响时间本身的正确性。
正确实现方案
场景1:获取本地时区的日期起止时间
得到的时间是你当前所处时区对应日期的00:00:00到23:59:59
// 当天起止时间 const todayStart = moment().startOf('day').toDate(); const todayEnd = moment().endOf('day').toDate(); // 昨天起止时间 const yesterdayStart = moment().subtract(1, 'day').startOf('day').toDate(); const yesterdayEnd = moment().subtract(1, 'day').endOf('day').toDate(); // 验证:打印本地时间字符串即可看到正确的0点/23点59分 console.log('当天开始时间', todayStart.toLocaleString()); console.log('当天结束时间', todayEnd.toLocaleString());
场景2:获取UTC时区的日期起止时间
得到的时间是UTC标准时间对应日期的00:00:00到23:59:59
// UTC当天起止时间 const utcTodayStart = moment.utc().startOf('day').toDate(); const utcTodayEnd = moment.utc().endOf('day').toDate();
你原有HTML引入moment.js的代码无需修改,可正常使用。
内容的提问来源于stack exchange,提问作者julz oh
相关产品推荐
相关产品推荐

