Получение моментов времени в JavaScript

В данном уроке мы с вами научимся получать различные моменты времени в виде объекта с датой. Также мы научимся находить разность между этими моментами времени.

День текущего года

Давайте получим объект с датой, содержащий 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 января в этом промежутке попадало на выходной день, то есть на субботу или на воскресенье.