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

如何使用moment.js获取今日零点时间 查询大于今日零点的数据库记录

问题原因

你之前的原生写法得到不符合预期的结果,是因为setHours是按照运行环境的本地时区设置时分秒,而你输出的带Z后缀的ISO字符串是UTC时区的时间,两者存在时区偏移,所以显示结果和预期不符。


解决方案

方案1:使用Moment.js(当前项目已引入Moment时优先用)

  • 要获取本地时区的今日零点,直接调用startOf('day')即可:
// 本地时区今日零点的Date对象
var dateTime = moment().startOf('day').toDate();
// 如果需要直接格式化和数据库匹配的时间字符串
var dateTimeStr = moment().startOf('day').format('YYYY-MM-DD HH:mm:ss');
  • 要获取UTC时区的今日零点,对应加utc()调用:
var dateTimeUTC = moment.utc().startOf('day').toDate();

方案2:纯原生JS实现

  • 如果你需要的是本地时区的今日零点,原有逻辑没问题,查询数据库时优先用时间戳比对即可避免时区显示干扰:
// 本地时区今日零点
const todayStart = new Date();
todayStart.setHours(0, 0, 0, 0);
// 取时间戳和数据库字段的时间戳比对,不会有时区问题
const todayStartTimeStamp = todayStart.getTime();
  • 如果你需要的是UTC时区的今日零点,用UTC相关方法设置:
const todayUTCStart = new Date();
todayUTCStart.setUTCHours(0, 0, 0, 0);
// 输出ISO字符串即为UTC零点格式
console.log(todayUTCStart.toISOString()) // 示例输出:2024-05-20T00:00:00.000Z

注意:和数据库比对时请先确认数据库存储的时间字段是本地时区还是UTC时区,保持查询时的时区和数据库一致即可避免时间匹配错误。


内容的提问来源于stack exchange,提问作者Harsha M V

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 10:15:00