javascript如何操作日期和时间_怎样进行日期计算和格式化【教程】

7次阅读

javaScript日期对象创建应避免字符串解析,优先用new date(年,月,日)或带时区的ISO格式;加减操作推荐毫秒计算;格式化用toLocaleDateString;注意时区差异,UTC时间需用getUTC系列方法。

javascript如何操作日期和时间_怎样进行日期计算和格式化【教程】

javascript 日期对象创建容易出错,别直接传字符串

new Date('2024-10-05') 看似方便,但不同浏览器解析行为不一致:safari 和旧版 chrome 可能按 UTC 解析,而 firefox 按本地时区。结果同一天在不同设备上得到的小时数可能差 8 小时。

  • 稳妥做法是显式拆解年月日: new Date(2024, 9, 5)(注意月份从 0 开始)
  • 若必须解析字符串,优先用 ISO 格式加时区标识:new Date('2024-10-05T00:00:00+08:00')
  • 避免 new Date('10/05/2024') 这类本地格式,IE 直接报 Invalid Date

日期加减要用毫秒计算,别改年月日字段

直接修改 date.getFullYear()date.setDate() 看似直观,但跨月、跨年时容易忽略边界(比如 1 月 31 日加一个月,不是 2 月 31 日,而是 3 月 3 日)。正确做法是统一转成毫秒操作。

  • 加 7 天:date.setTime(date.getTime() + 7 * 24 * 60 * 60 * 1000)
  • 减 1 个月(近似):date.setMonth(date.getMonth() - 1) —— 这个可以,但仅限“月”单位;天/小时/分钟必须用毫秒
  • 注意 setTime() 会改变原对象,如需保留原值,先 new Date(date.getTime()) 拷贝

格式化推荐 toLocaleDateString 而非手拼字符串

手动拼 date.getFullYear() + '-' + (date.getMonth()+1) + '...' 不仅冗长,还容易漏补零、错判时区、不支持国际化。现代浏览器都支持 toLocaleDateString 的选项参数。

  • 中文格式(年月日):date.toLocaleDateString('zh-CN', { year: 'numeric', month: '2-digit', day: '2-digit' })"2024-10-05"
  • 带时间(24 小时制):date.toLocaleString('zh-CN', { hour12: false, hour: '2-digit', minute: '2-digit' })
  • 注意:en-US 下默认是 10/5/2024,而 zh-CN2024/10/05,别依赖默认行为

时区处理最常被忽略,new Date() 总是本地时区

new Date() 创建的对象,其内部时间戳是 UTC,但所有 getter 方法(getHours()getDate())返回的是当前系统时区的值。这意味着同一时间戳,在北京和纽约调 getHours() 会得到不同数字。

立即学习Java免费学习笔记(深入)”;

  • 要获取 UTC 时间,必须用 getUTCHours()getUTCDate() 等方法
  • 后端通常存 UTC 时间戳,前端显示时应先转成本地时间(用 getter)或按用户偏好时区(需 Intl.DateTimeFormat 配置 timeZone
  • 调试时别只看 console.log(date) 的输出字符串——它自动转成本地格式,掩盖了真实时间戳

时区和字符串解析这两块,最容易在线上环境突然暴露问题,尤其当用户分布广、测试机时区固定时。

text=ZqhQzanResources