You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 20:54:03