JavaScript如何操作日期与时间?

JavaScript操作日期依赖Date对象,需注意本地时区和月份从0开始;通过new Date()创建时间,用get/set系列方法读写值,格式化推荐toLocaleString()或Intl.DateTimeFormat,计算用时间戳差值。

JavaScript操作日期与时间主要依靠内置的Date对象,它能获取、格式化、计算和比较时间,但要注意其默认基于本地时区,且月份从0开始(0表示1月)这些关键细节。

创建和获取当前或指定时间

new Date()可创建当前时间对象;传入字符串、时间戳或年月日等参数可构造指定时间。注意字符串格式尽量用ISO 8601(如"2025-05-20T14:30:00"),避免浏览器解析差异。

  • new Date() → 当前本地时间
  • new Date("2025-05-20") → 当天0点(ISO格式最可靠)
  • new Date(2025, 4, 20, 14, 30) → 2025年5月20日14:30(月份是4,不是5)
  • new Date(1716215400000) → 时间戳转日期(毫秒数)

读取日期各部分数值

使用get系列方法获取年、月、日、时、分、秒等,注意getMonth()返回0–11,getDate()才是每月第几天(1–31)。

  • date.getFullYear() → 四位年份(推荐,不用getYear()
  • date.getMonth() → 0起始的月份
  • date.getDate() → 日期(不是getDay(),后者是星期几,0=周日)
  • date.getHours(), getMinutes(), getSeconds() → 小时分钟秒
  • date.getTime() → 获取时间戳(毫秒),常用于计算差值

格式化输出常用方式

原生方法如toLocaleString()toISOString()适合快速格式化;需要自定义格式可用字符串拼接或Intl.DateTimeFormat(更健壮,支持多语言和时区)。

  • date.toLocaleString("zh-CN") → 中文本地格式,含年月日时分秒
  • date.toISOString().slice(0, 19).replace("T", " ") → 得到"2025-05-20 14:30:00"
  • new Intl.DateTimeFormat("zh-CN", {year:"numeric", month:"2-digit", day:"2-digit"}).format(date) → 精确控制字段和宽度

日期计算与比较

日期相减得到毫秒差,再换算成天、小时等;比较大小直接用>(本质比时间戳);修改时间用set系列方法(如setDate()setHours())。

  • date1 - date2 → 毫秒差,Math.floor((date1 - date2) / (1000 * 60 * 60 * 24))得天数差
  • date1 > date2 → 布尔结果,无需调用getTime()
  • date.setDate(date.getDate() + 7) → 加7天(会自动处理跨月)
  • date.setMonth(date.getMonth() + 1) → 加一个月(可能跳到下下月,需留意)

不复杂但容易忽略:时区影响大,做国际化项目优先用Intl API或引入dayjs/luxon等轻量库来简化处理。