для Epic Skills
DateВ JavaScript дата определяется количеством миллисекунд,
прошедших с 1 января 1970 года.
Для работы с датой и временем применяется встроенный объект Date. Этот объект не имеет свойств, но обладает несколькими методами, позволяющими устанавливать и изменять дату и время.
При создании без аргументов объект даты возвращает текущую дату:
new Date();
При создании с единственным аргументом в виде числа, дата будет равна количеству миллисекунд (1/1000 секунды), прошедших с 1 января 1970 года GMT+0.
new Date(0); // начало UNIX-эпохи
Прибавим 24 часа к дате начала UNIX-эпохи
var milliseconds = 24 * 60 * 60 * 1000;
var unixZero = new Date(0);
var unixDay = new Date(milliseconds);
Дату можно создать, используя компоненты даты.
new Date(2017, 6, 3, 19, 0, 0, 0);
Прибавим 24 часа к дате начала UNIX-эпохи
var milliseconds = 24 * 60 * 60 * 1000;
var unixZero = new Date(0);
var unixDay = new Date(milliseconds);
Возможно также создать дату из строки в специальном формате при помощи метода Date.parse: YYYY-MM-DDTHH:mm:ss.sssZ
— YYYY-MM-DD – дата в формате год-месяц-день.
— Буква T используется как разделитель.
— HH:mm:ss.sss – время: часы-минуты-секунды-миллисекунды.
— Часть Z обозначает временную зону – в формате +-hh:mm, либо символ Z, обозначающий UTC. По стандарту её можно не указывать, тогда UTC, но в Safari с этим ошибка, так что лучше указывать всегда.
Также возможны укороченные варианты, например YYYY-MM-DD или YYYY-MM или даже только YYYY.
Метод Date.parse(datestring) разбирает строку datestring в таком формате и возвращает соответствующее ей количество миллисекунд. Если это невозможно, Date.parse возвращает NaN.
new Date('2017');new Date('2017-06-03');new Date('2017-06-03T19:10:05.101+03:00');new Date('2017-06-03T19:10:05.101Z');Можно получить кол-во миллисекунд эпохи
var now = new Date();
now.getTime(); //
Но есть способ ещё проще!
Date.now(); //
Очень удобно оказывается оперировать датами в миллисекундах для получения новых дат. Например, можно вычислить дату "через год"
var oneYear = 12 * 31 * 24 * 60 * 60 * 1000;
var datePlusYear = new Date(Date.now() + oneYear);
//
Методами объекта Date можно получать отдельно значения дате:
getDay - день недели, целое число от 0 (воскресенье) до 6 (суббота).getDate - номер дня в месяце, целое число от 1 до 31.getMonth - месяц в году, целое число от 0 (январь) до 11 (декабрь).getYear - год в виде двух последних цифр, но есть баги в IE и FF.getFullYear - год в виде четырех цифр.
Можно также получать отдельно значения времени:
getHours - возвращает час суток в диапазоне от 0 (полночь) до 23.getMinutes - возвращает минуты в диапазоне от 0 до 59.getSeconds - возвращает секунды в диапазоне от 0 до 59.getMilliseconds - возвращает миллисекунды в диапазоне от 0 до 59.
Предположим, нам нужно текущее время в формате "чч:мм:сс"
var date = new Date();
var hours = date.getHours();
var minutes = date.getMinutes();
var seconds = date.getSeconds();
var results = hours + ":" + minutes + ":" + seconds;
//
Все пройденные методы возвращают дату местной временной зоны.
Существуют также UTC-варианты этих методов, возвращающие день, месяц, год и т.п. для зоны GMT+0 (UTC): getUTCFullYear(), getUTCMonth(), getUTCHours().
То есть, сразу после "get" вставляется "UTC".
var now = new Date();now.getHours();
// now.getUTCHours();
// Иногда требуется узнать разницу между местным временем и UTC.
Функция getTimezoneOffset() вернёт эту разницу, в минутах.
new Date().getTimezoneOffset() //
setDate, setHours, setMinutes, setSeconds, setFullYear, setMonth - те же методы, только для изменения компонентов даты.
setTime - устанавливает значение объекта Date и возвращает количество миллисекунд, прошедших с 1 января 1970 года.
Все они, кроме setTime(), обладают также UTC-вариантом, например: setUTCHours().
Мы можем вычислить дату "через год" и при помощи метода setYear
var now = new Date();
var datePlusYear = now.setFullYear(2018);
//
Будьте бдительны! Здесь мы не только записали в переменную datePlusYear дату на год позже, но и изменили исходную дату now
var now = new Date();now.setFullYear(2016);now.setFullYear(2018, 2, 19);now.setMonth(7);Можно устанавливать заведомо некорректные компоненты (например 13 месяц), а объект сам себя поправит.
При этом неправильные компоненты даты автоматически распределяются по остальным.
Вот пример безумной даты:
var date = new Date(2017, 13, 32, 25, 61, 61, 1001);Это можно использовать для получения даты, отдаленной от имеющейся на нужный промежуток времени. Например, получим дату на 70 секунд большую текущей:
var date = new Date(2017, 1, 28);date.setSeconds(date.getSeconds() + 70);Например, нужно увеличить на 2 дня дату «28 февраля 2011». Может быть так, что это будет 2 марта, а может быть и 1 марта, если год високосный. Но нам обо всем этом думать не нужно. Просто прибавляем два дня. Остальное сделает Date:
var date = new Date(2011, 1, 28);
date.setDate(date.getDate() + 2);
Даты можно вычитать, результат вычитания объектов Date – их временная разница, в миллисекундах.
var startDate = new Date(2017, 6, 3, 19);
var endDate = new Date(2017, 6, 3, 22);
console.log(endDate - startDate);
Также их можно и сравнивать
var startDate = new Date(2017, 6, 3, 19);
var endDate = new Date(2017, 6, 3, 22);
console.log(endDate > startDate);
console.log(endDate < startDate);
Выполнение любой функции можно повторять раз в заданное время
function hi() {
console.log('hi');
}
var interval = setTimeout(hi, 1000);
Бесконечо повторяемую функцию можно остановить
clearInterval(interval);
Как исполнить функцию не сразу, а, например, через 3 секунды?
function hi() {
console.log('hi');
}
var timeout = setTimeout(hi, 3000);
Можно предотвратить запуск функции с таймаутом
clearTimeout(timeout);