В данном уроке мы с вами научимся получать различные моменты времени в виде объекта с датой. Также мы научимся находить разность между этими моментами времени.
День текущего года
Давайте получим объект с датой, содержащий
8
-е марта текущего года. Под словами
текущий год имеется ввиду то, что
скрипт должен работать в любом году, всегда
получая тот год, который сейчас на планете.
Для этого нам нужно сделать еще один вспомогательный объект с датой, содержащий текущий момент времени. С помощью этого объекта мы сможем получить текущий год, а затем использовать этот год при создании объекта с желаемой нами датой, вот так:
let now = new Date(); // получаем текущий момент
let date = new Date(now.getFullYear(), 2, 8); // получаем нашу дату
Полученный момент времени мы можем использовать, например, чтобы определить день недели, соответствующий этой дате:
console.log(date.getDay());
Определите, какой день недели будет 31
декабря текущего года.
День текущего месяца
Давайте получим объект с датой, содержащий
25
-е число текущего месяца текущего года:
let now = new Date();
let date = new Date(now.getFullYear(), now.getMonth(), 25);
Определите, какой день недели будет 1
числа текущего месяца.
День следующего или предыдущего года
Давайте получим объект с датой, содержащий
21
января следующего года. Для этого
прибавим к текущему году единицу:
let now = new Date();
let date = new Date(now.getFullYear() + 1, 0, 21);
Определите, какой день недели будет 31
декабря следующего года.
Определите, какой день недели будет через год в такую же дату, как сегодня.
Определите, какой день недели был год назад в такую же дату, как сегодня.
День следующего или предыдущего месяца
Давайте узнаем день недели первого числа предыдущего месяца. Для этого от текущего месяца отнимем единицу:
let now = new Date();
let date = new Date(now.getFullYear(), now.getMonth() - 1, 1);
console.log(date.getDay());
Вопрос: не будет ли проблемы, если текущий
месяц январь? Ведь он имеет номер 0
,
и при вычитании из него единицы мы получим
минус первый месяц.
Определите, какой день недели был месяц назад в такой же день месяца, как сегодня.
Разность моментов
Давайте найдем разность между двумя моментами времени:
let date1 = new Date();
let date2 = new Date(2015, 4, 25, 12, 59, 59);
console.log(date1 - date2); // разность в миллисекундах
Определите, сколько дней между 1
января
и 10
сентября текущего года.
Определите, сколько дней между 20
числом текущего месяца и 10
числом
следующего.
Момент времени дня
Давайте получим объект с датой, содержащий полдень сегодняшнего дня:
let now = new Date();
let date = new Date(now.getFullYear(), now.getMonth(), now.getDate(), 12);
А теперь полдень завтрашнего дня:
let now = new Date();
let date = new Date(now.getFullYear(), now.getMonth(), now.getDate() + 1, 12);
Определите, сколько часов прошло между вчерашним полднем и текущим моментом времени.
Начало дня
Давайте получим объект с датой, содержащий начало текущего дня:
let now = new Date();
let date = new Date(now.getFullYear(), now.getMonth(), now.getDate(), 0, 0, 0);
Как вы уже знаете, параметры объекта Date
можно опускать с конца. В этом случае часы,
минуты и секунды будут иметь значение 0
.
Опустим их:
let now = new Date();
let date = new Date(now.getFullYear(), now.getMonth(), now.getDate());
А вот день опустить нельзя, так как если
он опущен, то пример значение 1
, а
нам нужен текущий день. Опустить месяц, не
опуская год также нельзя по правилам работы
с Date.
Опустить одновременно год, месяц и день также
нельзя - в этом случае возьмется текущий
момент времени. Почему это плохо, ведь нам
и нужен текущий год, текущий месяц и текущий
день? Дело в том, что нам нужна полночь,
то есть часы, минуты и секунды должны иметь
значение 0
, а в текущем моменте времени
они будут иметь текущие значения, а не полночь.
Определите, сколько часов прошло между началом дня и текущим моментом времени.
Конец дня
Давайте получим объект с датой, содержащий конец текущего дня:
let now = new Date();
let date = new Date(now.getFullYear(), now.getMonth(), now.getDate(), 23, 59, 59);
Можно посчитать концом текущего дня полночь
следующего (разница в 1
секунду):
let now = new Date();
let date = new Date(now.getFullYear(), now.getMonth(), now.getDate() + 1, 0, 0, 0);
Как вы уже знаете, нули в таком случае можно опустить:
let now = new Date();
let date = new Date(now.getFullYear(), now.getMonth(), now.getDate() + 1);
Кстати, полночью также будет является время
24
:00:00 текущего дня:
let now = new Date();
let date = new Date(now.getFullYear(), now.getMonth(), now.getDate(), 24, 0, 0);
Опустим нули:
let now = new Date();
let date = new Date(now.getFullYear(), now.getMonth(), now.getDate(), 24);
Определите, сколько часов осталось до конца дня.
Циклическая проверка
Давайте найдем все первые числа месяцев текущего года, которые являются воскресеньем:
let now = new Date();
let year = now.getFullYear();
for (let month = 0; month <= 11; month++) {
let date = new Date(year, month, 1);
if (date.getDay() == 0) {
console.log(year + '-' + month + '-1');
}
}
Рассмотрите промежуток от 2000
года
до текущего года. Определите, сколько раз
1
января в этом промежутке попадало
на выходной день, то есть на субботу или
на воскресенье.