好的,我帮你整理一份 JavaScript 中 Date 对象(JS 中的时间与日期处理)详解,从基础到高级方法,覆盖常用用法、实例和注意事项。


一、Date 对象概念

  • Date 是 JavaScript 内置对象,用来处理 日期和时间
  • 内部以 毫秒时间戳(1970-01-01 00:00:00 UTC 起的毫秒数)存储
  • 支持创建、格式化、比较、运算

二、创建 Date 对象

1. 当前时间

let now = new Date();
console.log(now); // 例如:2025-11-29T08:15:00.000Z

2. 指定日期字符串

let d1 = new Date("2025-12-01T10:30:00");
let d2 = new Date("2025/12/01 10:30:00"); // 推荐 YYYY/MM/DD 格式

3. 指定年月日(数字形式)

// new Date(year, monthIndex, day, hours, minutes, seconds, ms)
// monthIndex 从 0 开始(0 = 一月, 11 = 十二月)
let d3 = new Date(2025, 11, 1, 10, 30, 0);
console.log(d3); // 2025-12-01T10:30:00.000Z

4. 使用时间戳

let timestamp = Date.now(); // 当前时间戳(毫秒)
let d4 = new Date(timestamp);


三、Date 常用方法

1. 获取时间信息

方法描述
getFullYear()获取年份(四位)
getMonth()获取月份(0~11)
getDate()获取日期(1~31)
getDay()获取星期几(0=周日, 6=周六)
getHours()获取小时(0~23)
getMinutes()获取分钟(0~59)
getSeconds()获取秒(0~59)
getMilliseconds()获取毫秒(0~999)
getTime()获取时间戳(毫秒)
getTimezoneOffset()获取本地时区与 UTC 的差值(分钟)
let now = new Date();
console.log(now.getFullYear()); // 2025
console.log(now.getMonth());    // 10 (11月)
console.log(now.getDate());     // 29
console.log(now.getDay());      // 6 (周六)


2. 设置时间

方法描述
setFullYear(year)设置年份
setMonth(month)设置月份(0~11)
setDate(day)设置日期
setHours(hour)设置小时
setMinutes(minute)设置分钟
setSeconds(sec)设置秒
setMilliseconds(ms)设置毫秒
setTime(ms)设置时间戳
let d = new Date();
d.setFullYear(2026);
d.setMonth(0); // 一月
d.setDate(1);  // 1号
console.log(d); // 2026-01-01T...


3. 格式化日期

1. 内置方法

let now = new Date();
console.log(now.toString());       // Thu Nov 29 2025 16:15:00 GMT+0800 (CST)
console.log(now.toUTCString());    // Thu, 29 Nov 2025 08:15:00 GMT
console.log(now.toISOString());    // 2025-11-29T08:15:00.000Z
console.log(now.toDateString());   // Thu Nov 29 2025
console.log(now.toTimeString());   // 16:15:00 GMT+0800 (CST)
console.log(now.toLocaleString()); // 2025/11/29 16:15:00 (本地格式)

2. 自定义格式

let d = new Date();
let formatted = `${d.getFullYear()}-${d.getMonth()+1}-${d.getDate()} ${d.getHours()}:${d.getMinutes()}:${d.getSeconds()}`;
console.log(formatted); // 2025-11-29 16:15:0


4. 日期运算

1. 加减天数

let today = new Date();
let tomorrow = new Date(today.getTime() + 24*60*60*1000); // 加一天

2. 两个日期差值

let d1 = new Date("2025-12-01");
let d2 = new Date("2025-11-29");
let diffDays = (d1 - d2) / (1000*60*60*24); // 差值天数
console.log(diffDays); // 2


5. 常用技巧

  1. 获取时间戳(毫秒)
let timestamp = Date.now();

  1. 生成当前日期的 YYYY-MM-DD
function getTodayStr(){
    let d = new Date();
    return `${d.getFullYear()}-${d.getMonth()+1}-${d.getDate()}`;
}

  1. 判断闰年
function isLeapYear(year){
    return (year%4===0 && year%100!==0) || (year%400===0);
}


6. 注意事项

  1. 月份从 0 开始
    • 0 = 1月, 11 = 12月
    • 常见 bug: new Date(2025, 11, 1) → 12月1日
  2. Date 字符串解析兼容性
    • "YYYY-MM-DD" 在部分浏览器可能被解析为 UTC
    • 推荐 "YYYY/MM/DD""YYYY-MM-DDTHH:mm:ss"
  3. 时区问题
    • getHours() 返回本地时间
    • getUTCHours() 返回 UTC 时间
    • 注意跨时区运算

七、总结

  • 创建日期new Date() / 时间戳 / 字符串
  • 获取/设置时间getFullYear() / setDate()
  • 格式化:内置 toISOString() 或自定义拼接
  • 日期运算:毫秒 + 时间差 = 天数 / 小时 / 分钟
  • 注意事项:月份从 0 开始,时区差异,字符串解析兼容性

好嘞,我给你做一张 JavaScript Date 使用速查表 + 可视化流程图,把创建、获取、设置、格式化、日期运算全都梳理清楚,一眼就能看懂。


flowchart TD
    A[Date 对象] --> B[创建 Date]
    B --> B1[new Date()] 
    B --> B2[new Date(timestamp)]
    B --> B3[new Date("YYYY-MM-DD HH:MM:SS")]
    B --> B4[new Date(year, monthIndex, day, ...)]

    A --> C[获取时间信息]
    C --> C1[getFullYear()]
    C --> C2[getMonth()]
    C --> C3[getDate()]
    C --> C4[getDay()]
    C --> C5[getHours()]
    C --> C6[getMinutes()]
    C --> C7[getSeconds()]
    C --> C8[getMilliseconds()]
    C --> C9[getTime()]
    C --> C10[getTimezoneOffset()]

    A --> D[设置时间]
    D --> D1[setFullYear(year)]
    D --> D2[setMonth(month)]
    D --> D3[setDate(day)]
    D --> D4[setHours(hour)]
    D --> D5[setMinutes(minute)]
    D --> D6[setSeconds(sec)]
    D --> D7[setMilliseconds(ms)]
    D --> D8[setTime(ms)]

    A --> E[格式化日期]
    E --> E1[toString()]
    E --> E2[toUTCString()]
    E --> E3[toISOString()]
    E --> E4[toDateString()]
    E --> E5[toTimeString()]
    E --> E6[toLocaleString()]
    E --> E7[自定义拼接 `${year}-${month}-${day}`]

    A --> F[日期运算]
    F --> F1[加减天数: getTime() + 24*60*60*1000]
    F --> F2[日期差值: (d1 - d2) / (1000*60*60*24)]

    A --> G[常用技巧]
    G --> G1[获取时间戳: Date.now()]
    G --> G2[判断闰年: isLeapYear(year)]
    G --> G3[注意月份从0开始]
    G --> G4[时区问题: getHours() vs getUTCHours()]


速查表总结

操作类型方法/示例说明
创建 Datenew Date() / new Date(2025,11,1)当前时间 / 时间戳 / 年月日
获取信息getFullYear(), getMonth(), getDate()获取年份、月份、日、小时、分钟等
设置时间setFullYear(2026) / setDate(15)修改年、月、日、时、分、秒
格式化toISOString(), toLocaleString(), 自定义ISO / 本地 / 自定义格式
日期运算(d1 - d2)/1000/60/60/24计算天数差 / 加减时间
小技巧Date.now(), isLeapYear(year)获取时间戳、判断闰年等