базовый курс

ГРУППА КУРСА

Дата и время в JavaScript

Объект Date

JavaScript, как и многие языки программирования, может работать с датой и временем. Для этого существует специальный тип объекта Date. Он содержит дату и время. Для его создания используется ключевое слово new, после которого указывается, что создаётся объект Date.

имя объекта = new Date ();

При создании оъбект получает определённое значение. Если в скобках не указаны никакие параметры, то объект содержит текущие дату и время. Создадим объект Date и выведем его значение на страницу:

+
9
10
let current = new Date();
document.write(current);

Запустите страницу и посмотрите полученную строку. Рассмотрим её подробно:

  • первое слово - это день недели
  • второе слово - это месяц
  • затем число и год
  • далее идут через двоеточие часы, минуты и секунды
  • затем указан часовой пояс

Использовать время именно в таком виде не обязательно. Далее будут рассмотрены отдельные компоненты объекта.

Мы вывели объект с помощью метода document.write(). И он показан таким, каким и должен быть. Такой же результат будет при использовании функции alert(). А вот в консоли время будет показано другое. Это из за того, что консоль выводит время с учётом часового пояса.

Указание времени

Создаваемый объект может содержать не только текущее время, но и указанный момент времени. Для этого при создании объекта нужно указать параметры в скобках.

new Date (год, месяц, день, часы, минуты, секунды, милисекунды);

Параметры:

год - четырёхзначное число, указывающее год

месяц - номер месяца. Отсчёт начинается с нуля

день - день месяца

Год и месяц - обязательные параметры. Остальные можно не указывать, если Вам не нужна такая точность указания времени.

Создадим объект, содержащий дату - 20 августа 2017 года.

11
12
13
let useday = new Date(2017, 7, 20);
document.write('<br>');
document.write(useday);

Так как нумерация месяцев начинается с нуля, то мы указали не 8 месяц, а 7. Мы не указали часы минуты и секунды, поэтому они равны нулю.

Дату или время можно указать неправильно. При этом просисодит автоматический перевод времени в такой вид, в котором оно и должно быть указано. Для примера создадим объект с той же датой, но укажем 10 часов, а в минутах напишем 70.

14
15
var usedaymin = new Date(2017, 7, 20, 10, 70);
document.write('<br>'+usedaymin);

Посмотрите, как произведён расчёт времени - минуты переведены в часы и добавлены к часам, а остаток от этого перевода записан в минутах. Таким же способом будет переведён любой неправильно указанный параметр объекта.

Компоненты объекта Date

У созданного объекта Date можно получить отдельные компоненты. Для этого используются методы объекта.

getDay() - возвращает номер дня недели. Отсчёт начинается с Воскресенья, он имеет номер 0

getFullYear() - возвращает четырёхзначное число, содержащее год.

getMonth() - возвращает месяц

getDate() - возвращает день месяца

getHours() - возвращает часы

getMinutes() - возвращает минуты

getSeconds() - возвращает секунды

getMilliseconds() - возвращает милисекунды

Для примера выведем час для текущего времени. Напомню, текущее время содержит объект current, который мы создали в начале темы.

16
17
let hour = current.getHours();
document.write('<br>'+hour);

Изменение даты и времени

Рассмотренные выше компоненты можно не только получить, но и изменить. Это можно сделать с помощью следующих методов:

setFullYear (год, месяц, день);

Параметры:

год - указание года

месяц - указание месяца. Необязательный параметр. Если не указать, то месяц не изменяется

день - указание дня месяца. Необязательный параметр. Если не указать, то день не изменяется

setMonth (месяц, день);

Параметры:

месяц - указание месяца

день - указание дня месяца. Необязательный параметр

setDate (день);

Параметры:

день - указание дня месяца

setHours (часы, минуты, секунды, милисекунды);

setMinutes (минуты, секунды, милисекунды);

setSeconds (секунды, милисекунды);

setMilliseconds (милисекунды);

У всех этих метедов обязательным является только первый параметр

Изменим часы у объекта useday.

18
useday.setHours(2);

Если нужно указать часы и минуты, то можно использовать методы отдельно для часов и для минут. Но проще использовать один метод.

19
useday.setHours(2, 5);

Любому компоненту можно указать число большее, чем допускает формат. JavaScript автоматически всё пересчитает и обновит объект.

20
usedaymin.setHours(28);

Такой способ можно использовать, чтобы прибваить или отнять какой-то промежуток времени. Для примера прибавим 35 часов к объекту useday:

21
22
let obHours = useday.getHours();
useday.setHours(obHours + 35);

Время в формате Unix

Существует распространённый формат даты и времени, который используется в большинстве языков программирования. Выбрана условная точка отсчёта, 00 часов 00 минут 00 секунд 1 января 1970 года. Ещё её называют начало эпохи Unix. Любой момент времени можно представить в виде количества секунд, прошедших с этого времени. Такой формат может показаться странным, но на самом деле, он очень удобен. Привычное для нас представление времени состоит из нескольких чисел: отдельно часы, отдельно минуты и так далее. А время в секундах - это одно число. К нему можно легко прибавить или отнять любой отрезок времени и произвести другие математические расчёты. А полученный результат можно перевести в привычный формат. Для этого в языках программирования есть стандартные функции. В JavaScript время представляется не в секундах, а в милисекундах, то есть, добавляется ещё три знака. Так сделано, потому что JavaScript иногда работает с очень короткими промежутками времени. Принципиально это ничего не меняет, просто это нужно учитывать при расчётах.

Чтобы получить значение какого-то объекта Date в формате Unix, можно использовать метод getTime(). Он возвращает число, содержащее время в милисекундах. С этим числом можно произвести вычисления. Результат мы записываем в тот же или другой объект.

24
document.write('<br>' + useday.getTime());

При создании нового объекта Date можно указать только один аргумент. Это время в милисекундах.

27
28
let ntime = new Date(1503296100000);
document.write('<br>'+ntime);

Созданный таким способом объект ничем не отличается от других.

Метод setTime() позволяет записать в существующий объект новое значение в формате милисекунд.

29
usedaymin.setTime(1503298100000);