JavaScript 日期
一刷新,电脑的「现在」就会把例子换掉。所以先把一个早晨钉死:阅览室在 2024 年 3 月 14 日星期四上午 9:30 开门。后面每一个数,都从这个早晨里读,不从墙上的钟里读。
你不是在名单里找
上一课在数组里找,到手的是格子、−1、有还是没有、或者邮票本身。日期不是从名单里捞的。你先把时刻造好,再一次只问它一件事。问,不会把时针往前拨。
就这一早的六个数
不要把方法名当成词典来背。看这个星期四上,每个问题对上哪个数,又容易跟旁边哪个数对调。
📊 这个星期四的纸条
| 方法 | 你真正在问 | 这一早的数字 | 常对调的那个 |
|---|---|---|---|
getFullYear |
年份写全 | 2024 |
写成 24 |
getMonth |
三月在对象里停在哪 | 2 |
按挂历读成 3 |
getDate |
这个月的几号 | 14 |
星期四的编号 |
getDay |
星期四在一周里的位置 | 4 |
14 号 |
getHours |
从 0 到 23 的小时 | 9 |
再找一个「上午」标记 |
getMinutes |
分钟 | 30 |
向小时去要 30 |
一月是 0,二月是 1,三月就是 2。星期日是 0,星期一 1,星期二 2,星期三 3,星期四 4。数组里的 0 是第一格。这里的 0 是一年和一周的开头。
先把年份拿开
露出来的只有最前头那个:2024,一位不删。日子、小时、分钟这一行碰都不碰。
let opened = new Date(2024, 2, 14, 9, 30);
console.log(opened.getFullYear());
你看到的是 2024,因为第一格放的就是它。当作月份放进去的 2 不会印在这一行上,可对象一造好,它就已经是三月。24 是写在纸上的缩写,不是这次读取。
let opened = new Date(2024, 2, 14, 9, 30);
console.log(opened.getMonth());
看见 2 别急着加。一月占了 0,三月就落在这里。挂历把三月数成第三个月,那一格要等写给人看的句子时再挪。这一行先让 2 待着。
let opened = new Date(2024, 2, 14, 9, 30);
console.log(opened.getDate());
console.log(opened.getDay());
14 是这个月的几号,4 是把星期日当成 0 之后的星期四。两行挨着,是因为你问了两件事,不是因为它们是同一个问题。方法拿反了,就会把日期当成星期的名字,或者反过来。
let opened = new Date(2024, 2, 14, 9, 30);
console.log(opened.getHours());
console.log(opened.getMinutes());
先是 9,后是 30。小时从午夜的 0 走到 23,所以这个 9 就是上午,不必再挂一块「午前」的牌子。30 是分钟。向小时去要它,就是看错了指针。
let opened = new Date(2024, 2, 14, 9, 30);
let visit = new Date(2024, 2, 20, 15, 0);
console.log(visit.getTime() > opened.getTime());
console.log(visit.getDate());
来访是 3 月 20 日下午 3 点,比开馆晚。getTime 把每个时刻变成一个能分先后的数,比较的结果是 true。下一行的 20 是来访那天,不是比较的结果。=== 不问谁先谁后。它只问这两个名字是不是指着同一个对象。这里你造了两个。
不看代码的人读到的那一句
年份和日子照原样拿。月份按挂历的数法来写。
<!DOCTYPE html>
<html>
<head>
<title>dates — page</title>
</head>
<body>
<p id="when">…</p>
<script>
let opened = new Date(2024, 2, 14, 9, 30);
let year = opened.getFullYear();
let displayMonth = opened.getMonth() + 1;
let day = opened.getDate();
let box = document.getElementById("when");
box.textContent = year + "-" + displayMonth + "-" + day;
</script>
</body>
</html>
段落上是 2024-3-14。你再问对象月份,它仍是 2。往前挪的那一格,只活在给眼睛看的句子里。存着的早晨没有动。
这个早晨要对上的六处
对纸条,别猜。
- 年份写全是 2024,不是 24
- 对象里面三月是 2
- 14 来自
getDate,星期四的 4 来自getDay - 小时是 9,分钟是 30
- 二十号的来访更晚,比较是 true,那天是 20
- 段落里的句子是
2024-3-14,对象仍把月份留在 2
程序照跑,日子却错了
没有报错。变掉的只是你以为自己读到的那个月或那个数。
- 想要三月,却把 3 交给
new Date,造出来的是四月 - 把 2 读成二月,或者非要
getMonth给出 3 - 向
getDay去要 14 - 向
getDate去要星期四的 4 - 用
===判断哪个时刻更晚 - 不带数字调用
new Date(),一刷新早晨就换成另一个
合上这一页还该留着的
- 三月是 2,因为一月是 0
- 这个月的几号靠
getDate - 星期几靠
getDay,星期日是 0 - 两个时刻的先后,靠
getTime给出的那个数 - 人读到的句子把月份写得比对象里靠前一格,对象仍停在 2
- 下一页是 Math 对象
🧠 测试您的知识
测试您的知识
通过这个互动测验挑战自己,看看你对这个主题的理解程度如何
📝 说明
- 仔细阅读每个问题
- 为每个问题选择最佳答案
- 您可以随时重新参加测验
- 您的进度将显示在顶部