JavaScript: JavaScript 日期
最后更新:2026-10-13
JavaScript 用 Date 对象处理日期和时间。它就像一块电子手表——能看当前时间,也能设定任意时刻,还能计算时间差。
1. Date对象的创建与操作
四种常见创建方式:
HTML
<script>
console.log(new Date()); // 当前时间
console.log(new Date("2025-06-19")); // 日期字符串
console.log(new Date(2025, 5, 19, 10, 30, 0)); // 年、月、日、时、分、秒
console.log(new Date(1718764800000)); // 时间戳(毫秒)
</script>
大坑预警:月份从 0 开始!0 = 一月,11 = 十二月。new Date(2025, 5, 19) 里的 5 是六月,不是五月。这是 Date 对象被吐槽最多的设计,没有之一。
(2) 获取日期时间
| 方法 | 返回 | 注意 |
|---|---|---|
getFullYear() |
4位年份 | 别用 getYear(),已废弃 |
getMonth() |
0-11 | 要 +1 才是实际月份 |
getDate() |
1-31 | 当月第几天 |
getDay() |
0-6 | 0=周日,不是周一! |
getHours() |
0-23 | — |
getMinutes() |
0-59 | — |
getSeconds() |
0-59 | — |
getDay() 返回的是星期几,不是当月第几天——要获取第几天用的是 getDate()。新手经常搞混。
(3) 设置日期时间
对应一组 set 方法:setFullYear()、setMonth()、setDate()、setHours()、setMinutes()、setSeconds()。设置时会自动进位:
HTML
<script>
const d = new Date(2025, 5, 19);
d.setDate(32); // 自动变成 7月2日
console.log(d.toLocaleDateString());
</script>
(4) 日期格式化
| 方法 | 示例输出 |
|---|---|
toLocaleDateString() |
"2025/6/19" |
toLocaleTimeString() |
"10:30:00" |
toLocaleString() |
"2025/6/19 10:30:00" |
这些方法会根据浏览器的语言环境自动格式化,中文浏览器显示中文格式。
(5) 时间戳和计算时间差
时间戳是自 1970年1月1日 00:00:00 UTC 起经过的毫秒数。
HTML
<script>
console.log(Date.now()); // 获取当前时间戳
console.log(new Date().getTime()); // 同上
</script>
计算时间差的核心思路:两个时间戳相减,得到毫秒差,再换算:
HTML
<script>
const start = Date.now();
for (let i = 0; i < 1000000; i++) {} // 模拟操作
const end = Date.now();
const diff = end - start; // 毫秒
const diffSeconds = diff / 1000; // 秒
console.log("耗时:" + diff + "ms(" + diffSeconds + "秒)");
</script>
▶ 示例:显示当前日期时间
▶ 试一试▶ 示例:日期信息详解
▶ 试一试▶ 示例:倒计时计算
▶ 试一试▶ 示例:时间差计算
▶ 试一试❓ 常见问题
Q 为什么
getMonth() 返回的月份要 +1?A 因为 Java 的
Date 类就是这么设计的,JavaScript 继承了这个"传统"。虽然所有人都觉得这设计很蠢,但改不了了——太多现有代码依赖这个行为。记住就好。Q
new Date("2025-06-19") 和 new Date(2025, 5, 19) 有区别吗?A 有。字符串解析的日期默认是 UTC 时间 0 点,而参数形式是本地时间。显示时可能差 8 小时(东八区)。如果只需要日期不关心时间,用参数形式更安全。
Q 如何计算"某人多少岁了"?
A 用当前年份减出生年份,然后检查今年生日是否已过:如果当前月份 < 出生月份,或者月份相同但日期 < 出生日期,年龄再减 1。
📖 小节
- 创建 Date 对象有多种方式:
new Date()、new Date(2024, 0, 1)、new Date("2024-01-01") - 获取日期时间用
getFullYear/getMonth/getDate/getDay/getHours/getMinutes/getSeconds - 设置日期时间用对应的
set方法,修改后原对象会改变 - 日期格式化:
toLocaleDateString本地化、toISOString标准格式、手动拼接 - 时间戳是毫秒数,
Date.now()获取当前时间戳,加减时间戳实现日期计算
📝 作业
- 编写一个函数
formatDate(date),返回"YYYY年MM月DD日 星期X"格式的字符串。注意月份和日期要补零。 - 编写一个函数
getAge(birthday),传入出生日期字符串(如"2000-03-15"),返回当前实足年龄。 - 编写一个"已过去多久"功能:输入一个过去的日期,显示"距今 X 年 X 月 X 天"或"X 天前"或"X 小时前"(根据时间远近自动选择格式)。