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

如何在JavaScript Date中获取当日的起始时间与结束时间

问题根因

你遇到的7小时偏移是时区差导致的:你当前运行环境的时区为UTC+7,当你混用UTC时间方法和本地时间方法、或是直接拼接不带时区标识的日期字符串时,就会出现该偏移。此外原生JavaScript的Date对象不存在.toDate()方法,你应该是在使用Day.js/Moment.js这类日期库的.toDate()方法返回原生Date实例。

修复方案

方案1:使用本地时区设置时间(绝大多数场景适用)

直接操作本地时区的时分秒,不要额外调用.utc()这类转UTC时区的方法:

// 原生JS实现
// 获取本地时区当日00:00:00
const getStartOfDay = () => {
  const now = new Date()
  // 直接设置本地时区的时分秒毫秒为0
  now.setHours(0, 0, 0, 0)
  return now
}

// 获取本地时区当日结束时间,如果你确实需要中午11:59:59,把23改为11即可
const getEndOfDay = () => {
  const now = new Date()
  now.setHours(23, 59, 59, 999)
  return now
}

如果你使用的是日期库:

// Day.js 示例
import dayjs from 'dayjs'
const startOfDay = dayjs().startOf('day').toDate()
const endOfDay = dayjs().endOf('day').toDate()

// Moment.js 示例
const startOfDay = moment().startOf('day').toDate()
const endOfDay = moment().endOf('day').toDate()

方案2:固定使用UTC时区时间

如果你业务要求使用UTC时区的当日起止时间,统一使用UTC相关方法操作:

// 原生JS实现UTC当日0点
const getUTCStartOfDay = () => {
  const now = new Date()
  now.setUTCHours(0, 0, 0, 0)
  return now
}

// 原生JS实现UTC当日结束
const getUTCEndOfDay = () => {
  const now = new Date()
  now.setUTCHours(23, 59, 59, 999)
  return now
}
验证方法

你可以调用new Date().getTimezoneOffset()查看当前时区和UTC的差值,单位为分钟,返回值为-420即代表当前时区为UTC+7,和你遇到的7小时偏移对应。

注意:不要直接拼接YYYY-MM-DDT00:00:00这类字符串创建日期,不同浏览器对不带时区标识的字符串解析逻辑不同,极易出现时区偏移问题。

内容的提问来源于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 07:24:03