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 按本地格式输出。