JavaScript Date(日期)

Date 是 JavaScript 内置的日期时间对象,负责处理"某年某月某日某时"这类问题:记录用户登录时间、计算活动倒计时、格式化订单日期……几乎每个网页都离不开它。Date 底层存的是一个毫秒时间戳,所有方法都在这个基础上取年、月、日、时、分、秒。

创建 Date 对象

new Date() 不带参数得到当前时刻;带参数可以传日期字符串或"年、月、日、时、分、秒":

let now = new Date();            // 当前时间
console.log(now);                // 输出:Mon May 12 2025 10:30:00 GMT+0800(示例)
let d1 = new Date(2025, 0, 15);  // 2025 年 1 月 15 日
let d2 = new Date("2025-05-01T10:00:00"); // 字符串写法,更直观
console.log(d1);   // 输出:Wed Jan 15 2025 00:00:00 GMT+0800(示例)
console.log(d2);   // 输出:Thu May 01 2025 10:00:00 GMT+0800(示例)

最容易踩的坑:月份从 0 开始计数,0 代表一月,11 代表十二月,写 new Date(2025, 5, 1) 其实是 6 月 1 日。

获取年月日时分秒

用 get 系列方法取出各部分,注意 getMonth 从 0 开始、getDay 返回星期几:

let d = new Date("2025-05-12T14:35:20");
console.log(d.getFullYear());  // 输出:2025
console.log(d.getMonth());     // 输出:4(0 起,5 月是 4)
console.log(d.getDate());      // 输出:12,几号
console.log(d.getDay());       // 输出:1,星期几(0=周日,1=周一)
console.log(d.getHours());     // 输出:14
console.log(d.getMinutes());   // 输出:35
console.log(d.getSeconds());   // 输出:20

想获得"本地时区 0~23"以外的世界时间,可以改用 getUTCFullYear、getUTCHours 等 UTC 系列方法。

时间戳:getTime 与 Date.now()

每个 Date 内部都是一个毫秒时间戳(1970-01-01 00:00:00 UTC 起算的毫秒数),用它做时间差计算最可靠:

let start = Date.now();        // 当前时间戳,毫秒
for (let i = 0; i < 100000; i++) {}  // 模拟一段耗时操作
let cost = Date.now() - start;
console.log(cost);             // 输出:2(毫秒,数值随机器变化)
let d = new Date("2025-01-01");
console.log(d.getTime());      // 输出:1735660800000(示例)
console.log(new Date(0));      // 输出:Thu Jan 01 1970 08:00:00 GMT+0800

时间戳是整数,可以直接用 >、< 比较两个日期的先后。

设置与增减日期

set 系列方法可以改日期,而且能"自动进位":把日期加过头,月份会自动加 1:

let d = new Date("2025-01-31");
d.setFullYear(2026);           // 改成 2026 年
console.log(d.getFullYear());  // 输出:2026
d.setMonth(1, 31);             // 设置 2 月 31 日
console.log(d);                // 输出:Tue Mar 03 2026 ...(2 月没有 31 日自动进位到 3 月)
d.setDate(d.getDate() + 7);    // 加 7 天
console.log(d.getDate());      // 输出:10

"加 N 天/减 N 小时"就用 setDate(getDate()+N)、setHours(getHours()+N),引擎会自动处理跨月跨年。

格式化输出

toISOString 得到标准字符串,toLocaleString 按本地习惯格式化,适合直接展示:

let d = new Date("2025-05-12T14:35:20");
console.log(d.toISOString());         // 输出:2025-05-12T06:35:20.000Z(UTC)
console.log(d.toDateString());        // 输出:Mon May 12 2025
console.log(d.toLocaleDateString());  // 输出:2025/5/12,随浏览器语言环境变化
console.log(d.toLocaleString("zh-CN", { year: "numeric", month: "2-digit", day: "2-digit" }));
// 输出:2025/05/12

小结:Date 用 new Date() 创建,取部件用 get 系列(月份 0 起、星期用 getDay),比先后用时间戳或直接比较,增减日期用 setDate/getDate 组合;需要展示时用 toLocaleString 按本地格式输出。

笔记加载中…