Даты в JavaScript
Настенный календарь и объект спорят о марте ещё до первой строки кода. Для тебя март третий. Объект, если январь у него нулевой, держит март двойкой. Чтобы спор не расползался на «сейчас» с часов компьютера, оставляем одно утро: читальный зал открылся в четверг 14 марта 2024 года в 9:30.
Это не поиск по списку
В массиве ответом была ячейка, −1, да или нет, или сама марка. Дату так не находят. Ты собираешь момент и задаёшь ему один вопрос. Вопрос стрелку не двигает.
Шесть чисел именно этого утра
На листке — число этого четверга и сосед, с которым его путают.
📊 Листок этого четверга
| Метод | О чём ты спрашиваешь | Число этого утра | С чем это путают |
|---|---|---|---|
getFullYear |
год целиком | 2024 |
с записью 24 |
getMonth |
где в объекте сидит март | 2 |
с тройкой настенного календаря |
getDate |
какое число месяца | 14 |
с номером четверга |
getDay |
где четверг в неделе | 4 |
с числом 14 |
getHours |
час суток от 0 до 23 | 9 |
с отдельной пометкой «утро» |
getMinutes |
минута | 30 |
с просьбой достать 30 из часа |
Январь 0, февраль 1, март 2. Воскресенье 0, понедельник 1, вторник 2, среда 3, четверг 4. Ноль из массива был первой ячейкой. Эти нули открывают год и неделю.
Сначала год, месяц не трогаем
Наружу выходит только то, что стояло первым: 2024, целиком. День, час и минута этой строке не нужны.
let opened = new Date(2024, 2, 14, 9, 30);
console.log(opened.getFullYear());
Видишь 2024, потому что его и поставили первым. Двойка месяца в этой строке не печатается, но с момента сборки она уже значит март. 24 — это сокращение на бумаге, не эта проверка.
let opened = new Date(2024, 2, 14, 9, 30);
console.log(opened.getMonth());
Двойка на месте, и это уже март, а не недосчитанный месяц. Январь забрал ноль. Единицу припишешь позже, во фразе для человека. Сейчас число не трогай.
let opened = new Date(2024, 2, 14, 9, 30);
console.log(opened.getDate());
console.log(opened.getDay());
14 — число месяца, 4 — четверг, если воскресенье нулевое. Строки идут подряд, потому что ты спросил оба раза. Это не один вопрос. Перепутать методы — прочитать дату и решить, что это имя дня, или наоборот.
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());
Визит — 20 марта в 15:00, то есть позже открытия. 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
Программа идёт, день не тот
Сообщения об ошибке нет. Меняется только месяц или число, которое ты думал прочитать.
- Передаёшь в
new Dateтройку, имея в виду март, и собираешь апрель - Читаешь 2 как февраль или требуешь от
getMonthтройку - Просишь 14 у
getDay - Просишь четвёрку четверга у
getDate - Решаешь, какой момент позже, через
=== - Вызываешь
new Date()без чисел, и каждое обновление страницы ставит другое утро
Что должно остаться, когда закроешь страницу
- Март — это 2, потому что январь — 0
- Число месяца даёт
getDate - День недели даёт
getDay, воскресенье — 0 - Два момента упорядочивают числом из
getTime - Фраза для человека пишет месяц на шаг дальше, чем лежит в объекте, а объект остаётся на 2
- Дальше — объект Math
🧠 Проверьте Свои Знания
Проверьте Свои Знания
Бросьте себе вызов с помощью этой интерактивной викторины и узнайте, насколько хорошо вы понимаете тему
📝 Инструкции
- Внимательно прочитайте каждый вопрос
- Выберите лучший ответ на каждый вопрос
- Вы можете пересдавать тест столько раз, сколько захотите
- Ваш прогресс будет показан вверху