Объект Date позволяет работать с датами и временем. Для создания нового объекта Date используется следующий синтаксис:
New Date()
Даты хранятся в нём как количество миллисекунд, прошедших с полуночи 1 января 1970 г. согласно единому всемирному времени (UTC). Благодаря такому формату с помощью Date можно точно представлять даты, отстоящие от 1 января 1970 г. на 285616 лет.
Если конструктор Date вызывается без аргументов, создаётся объект с текущими значениями даты и времени. Для создания объекта Date с определенной датой или временем, необходимо будет передать один из четырех возможных параметров:
- миллисекунды: значение должно быть числом миллисекунд с 01.01.1970 var birthDate = new Date(8298400000); document.write(birthDate);
- строка с датой: любая дата в формате поддерживаемом методом parse() var birthDate = new Date(«April 16, 1975»); document.write(birthDate);
- год, месяц, день var birthDate = new Date(1975, 4, 28); document.write(birthDate);
Обратите внимание, что число 4 соответствует маю месяцу. Это значит, что январю соответствует число 0. Аналогичным образом вычисляются и дни, только нулю в этом случае соответствует воскресенье.
- год, месяц, день, час, минуты, секунды, миллисекунды
При работе с объектом Date важно помнить, что вычисления выполняются с использованием единого всемирного времени (UTC), несмотря на то, что ваш компьютер может отображать время в соответствии с вашей временной зоной.
Методы
| Метод | Описание |
|---|---|
| getDate() | Возвращает день месяца (от 1 до 31) для указанной даты по местному времени. |
| getDay() | Возвращает день недели (от 0 до 6; 0 = воскресенье, 1 = понедельник и т.д.) для указанной даты по местному времени.. |
| getFullYear() | Возвращает год (четыре цифры). |
| getHours() | Возвращает час (от 0 до 23). |
| getMilliseconds() | Возвращает миллисекунды (от 0 до 999). |
| getMinutes() | Возвращает минуты (от 0 до 59). |
| getMonth() | Возвращает месяц (от 0 до 11; 0 = январь, 1 = февраль и т.д.). |
| getSeconds() | Возвращает секунды (от 0 до 59). |
| getTime() | Возвращает количество миллисекунд, прошедших с полуночи 01.01.1970. |
| getTimezoneOffset() | Возвращает разницу во времени между временем UTC и местным временем, в минутах. |
| getUTCDate() | Возвращает день месяца по всемирному времени (от 1 до 31). |
| getUTCDay() | Возвращает день недели по всемирному времени (от 0 до 6). |
| getUTCFullYear() | Возвращает год по всемирному времени (четыре цифры). |
| getUTCHours() | Возвращает час по всемирному времени (от 0 до 23). |
| getUTCMilliseconds() | Возвращает миллисекунды по всемирному времени (от 0 до 999). |
| getUTCMinutes() | Возвращает минуты по всемирному времени (от 0 до 59). |
| getUTCMonth() | Возвращает месяц по всемирному времени (от 0 до 11). |
| getUTCSeconds() | Возвращает секунды по всемирному времени (от 0 до 59). |
| parse() | Анализирует строку даты (например, «21 мая 1992 года») и возвращает строку со значением даты, которая содержит число в миллисекундах с 1 января 1970 00:00:00. |
| setDate() | Устанавливает день месяца для указанной даты по местному времени (от 1 до 31). |
| setFullYear() | Устанавливает год (четыре цифры). |
| setHours() | Устанавливает часы для указанной даты по местному времени (от 0 до 23). |
| setMilliseconds() | Устанавливает миллисекунды для указанной даты по местному времени. |
| setMinutes() | Устанавливает минуты (от 0 до 59). |
| setMonth() | Устанавливает месяц (от 0 до 11). |
| setSeconds() | Устанавливает секунды (от 0 до 59). |
| setTime() | Устанавливает дату в миллисекундах после (или до) 01.01.1970. |
| setUTCDate() | Задает день месяца. |
| setUTCFullYear() | Устанавливает год по всемирному времени (четыре цифры). |
| setUTCHours() | Устанавливает час для указанной даты по всемирному времени. |
| setUTCMilliseconds() | Задает миллисекунды для указанной даты по всемирному времени. |
| setUTCMinutes() | Устанавливает минуты для указанной даты по всемирному времени. |
| setUTCMonth() | Задает месяц для указанной даты по всемирному времени. |
| setUTCSeconds() | Устанавливает секунды для указанной даты по всемирному времени. |
| toDateString() | |
| toISOString() | Преобразует дату в строку, используя стандарт ISO 8601. |
| toJSON() | Возвращает дату в виде строки, отформатированную как дата JSON. |
| toLocaleDateString() | |
| toLocaleTimeString() | Возвращает часть даты в виде строки, с представлением даты на основе параметров системы. |
| toLocaleString() | Возвращает дату в виде строки, с представлением даты на основе параметров системы. |
| toString() | Возвращает строку, представляющую указанный объект Date. |
| toTimeString() | Возвращает часть даты в виде строки. |
| toUTCString() | Преобразует дату в строку, используя часовой пояс UTC. |
| UTC() | Принимает те же параметры, что и длинная форма конструктора (т.е. 2-7) и возвращает количество миллисекунд с 1 января 1970, 00:00:00 UTC. |
| valueOf() | Возвращает примитивное значение объекта Date. |
Используйте new Date() для создания нового объекта Date содержащего текущую дату и время.
Обратите внимание, что Date() вызываемая без аргументов, эквивалентна new Date(Date.now()) .
Когда у вас есть объект даты, вы можете применить любой из нескольких доступных методов для извлечения его свойств (например, getFullYear() чтобы получить 4-значный год).
Ниже приведены некоторые общие методы даты.
Получить текущий год
var year = (new Date()).getFullYear(); console.log(year); // Sample output: 2016
Получить текущий месяц
var month = (new Date()).getMonth(); console.log(month); // Sample output: 0
Обратите внимание, что 0 = январь. Это потому, что месяцы варьируются от 0 до 11 , поэтому часто желательно добавить +1 к индексу.
Получить текущий день
var day = (new Date()).getDate(); console.log(day); // Sample output: 31
Получить текущий час
var hours = (new Date()).getHours(); console.log(hours); // Sample output: 10
Получить текущие минуты
var minutes = (new Date()).getMinutes(); console.log(minutes); // Sample output: 39
Получить текущие секунды
var seconds = (new Date()).getSeconds(); console.log(second); // Sample output: 48
Получить текущие миллисекунды
Чтобы получить миллисекунды (от 0 до 999) экземпляра объекта Date , используйте метод getMilliseconds .
Var milliseconds = (new Date()).getMilliseconds(); console.log(milliseconds); // Output: milliseconds right now
Преобразование текущего времени и даты в удобочитаемую строку
var now = new Date(); // convert date to a string in UTC timezone format: console.log(now.toUTCString()); // Output: Wed, 21 Jun 2017 09:13:01 GMT
Статический метод Date.now() возвращает количество миллисекунд, прошедших с 1 января 1970 года 00:00:00 по UTC. Чтобы получить количество миллисекунд, прошедших с того времени, используя экземпляр объекта Date , используйте его метод getTime .
// get milliseconds using static method now of Date console.log(Date.now()); // get milliseconds using method getTime of Date instance console.log((new Date()).getTime());
Получить текущую дату в JavaScript очень просто. Для этого предназначен объект Date . Его синтаксис достаточно прост, а имена методов интуитивно понятны. В приведенных ниже примерах я покажу, как работать с объектом Date (JavaScript new date ), чтобы получить текущие год, месяц, день и время с точностью до миллисекунды!
Получение текущей даты:
Чтобы получить в JavaScript текущую дату, используйте ключевое слово new для создания нового экземпляра объекта Date .
var date = new Date(); console.log(date);
Этот код выводит на консоль следующую информацию:
//Tue Feb 02 2016 15:46:56 GMT-0500 (Eastern Standard Time)
Здесь отображается текущий день недели, текущий месяц, день месяца, год и даже текущее время в 24-часовом формате. Фрагмент «GMT » означает время по Гринвичу, а «-0500 » — это разница в часовых поясах между местным временем и GMT .
Цитата из Википедии : «Среднее время по Гринвичу (GMT ) — это среднее солнечное время в Королевской обсерватории в Гринвиче, Лондон.» Это связано с универсальным координированным временем (UTC ). «Eastern Standard Time » в выведенном значении даты относится к временной зоне вашего браузера или компьютера.
* Обратите внимание, что GMT и UTC различаются между собой. Мы будем рассматривать значения UTC в минутах.
* Также обратите внимание, что дата в JavaScript определяется временем в миллисекундах, которое прошло с полуночи 01 января 1970 года, UTC. В одном дне 86,400,000 миллисекунд. Диапазон объекта Date составляет от -100,000,000 дней до 100,000,000 дней относительно 01 января 1970 года, UTC.
* Значения, полученные с использованием упомянутого выше метода, зависят от настроек системы вашего устройства. Если вы измените настройки часов компьютера, изменится и время, которое будет возвращать этот метод.
Хорошо, мы разобрались с new Date JavaScript форматами и теперь готовы двигаться дальше!
Получение дня недели:
Чтобы получить день недели, используйте метод JavaScript объекта Date getDay() :
var day = date.getDay(); console.log(day);
* Обратите внимание, что дни недели пронумерованы от 0 до 6, воскресенье = 0, понедельник = 1, вторник = 2 и так далее.
Получение месяца:
Чтобы получить текущий месяц текущего года, используйте метод getMonth() . До этого я говорил, что названия методов интуитивно понятны!
var month = date.getMonth(); console.log(month); //1
* Обратите внимание, что, как и дни недели, месяцы возвращаются в числовом формате от 0 до 11; январь = 0, февраль = 1, март = 2 и так далее.
Получение дня месяца:
Чтобы получить день месяца, можно использовать метод GetDate() .
var dayOfMonth = date.getDate(); console.log(dayOfMonth); //2
* Метод GetDate() возвращает дни месяца, пронумерованные от 1 до 31; номер 1 соответствует первому дню месяца.
Получение времени:
Чтобы получить текущее время, используется метод GetTime () .
var time = date.getTime(); console.log(time); //1454461242058
Выглядит… странно… Что это такое? Вы видите количество миллисекунд, прошедших с 1 января 1970 00:00:00 UTC. Так сколько это лет?
1454461242058 мс / 31540000000 мс в году = около 46 лет
1970 год + 46 лет = 2016 год
Давайте проверим, чтобы убедиться:
var year = date.getFullYear(); console.log(year) //2016
Да, это оно! Мы только что вывели с помощью JavaScript new date текущую дату и время.
Для работы с датой и временем в JavaScript существует специальный объект — Date. Этот объект поддерживается практически всем версиями JavaScript, а зачит им можно пользоваться не оглядываясь на проблемы совместимости.
Дата и время в объекте Date хранятся не в явном виде, а как и в большинстве языков программирования — в виде количества миллисекунд, прошедших с дня рождения Unix, т.е. с 0 часов 0 минут 1 января 1970 года. Отличительная особенность объекта Date — все диапазонные значения имеют индексы, начинающиеся с нуля. Это означает, что январь будет иметь индекс 0 (месяц №0), а декабрь будет не двенадцатым, а одиннадцатым месяцем. То же самое справедливо и для дней недели, часов, минут и пр.
Создать объект Date очень просто:
// текущая дата-время var date = new Date(); // дата-время из строки или числа var date = new Date(дата); // дата-время из отдельных значений var date = new Date(год, месяц, день, час, минута, секунда, миллисекунда);
Объект Date обладает рядом очень полезных методов, позволяющих работать с отдельными компонентами даты-времени, а так же проводить проверку коррестности и правильный вывод даты в заданном формате.
| Методы получения компонентов даты-времени | |
| getFullYear | Возвращает год (например, 2011). |
| getYear | Возвращает год. Назначение метода getYear аналогично назначению getFullYear, однако данный метод является устаревшим и не рекомендуются к использованию, т.к. результаты его работы не однозначны: для диапазона дат от 1900 до 1999 года метод возвращает номер года в столетии (двузначный, например 77), а для дат за пределами этого диапазона — возвращается полное значение (четырёхзначное, например 2009). |
| getMonth | Возвращает месяц. |
| getDate | Возвращает день месяца (число в месяце). |
| getHours | Возвращает час. |
| getMinutes | Возвращает минуту. |
| getSeconds | Возвращает секунду. |
| getMilliseconds | Возвращает миллисекунду. |
| getDay | Возвращает номер деня недели. |
| getTime | Возвращает миллисекундное смещение, хранимое объектом. |
| Методы изменения компонентов даты-времени | |
| setFullYear | Устанавливает год. |
| setYear | Устанавливает год. Назначение метода setYear аналогично назначению setFullYear, однако данный метод является устаревшим и не рекомендуются к использованию (так же как и метод getYear). |
| setMonth | Устанавливает месяц. |
| setDate | Устанавливает дату в месяце (день месяца). |
| setHours | Устанавливает час. |
| setMinutes | Устанавливает минуту. |
| setSeconds | Устанавливает секунду. |
| setMilliseconds | Устанавливает миллисекунду. |
| setTime | Устанавливает миллисекундное смещение относительно 00:00:00 01.01.1970 |
| Фунции форматирования и вывода даты-времени | |
| toString | Возвращает строковое представление даты и времени. |
| toUTCString | Возвращает строковое представление даты и времени с пересчётом на время UTC. Формат возвращаемой строки учитывает все интернет-стандарты. |
| toGMTString | Возвращает строковое представление даты и времени с пересчётом на время GMT (время по Гринвичу). Формат возвращаемой строки учитывает все интернет-стандарты. |
| toLocaleString | Аналог toString, но возвращает строковое представление даты и времени, отформатированное в соответствии с настройками локализации данного пользователя. |
| toTimeString | Возвращает строковое представление времени (строка содержит только время). |
| toDateString | Возвращает строковое представление даты (строка содержит только дату). |
| toLocaleTimeString | Аналог toTimeString, но возвращает строковое представление времени, отформатированное в соответствии с настройками локализации пользователя. |
| toLocaleDateString | Аналог toDateString, но возвращает строковое представление даты, отформатированное в соответствии с настройками локализации пользователя. |
| Дополнительные функции | |
| getTimezoneOffset | Возвращает смещение локального времени на компьютере пользователя относительно времени UTC. Смещение возвращается в минутах. |
| parse | Функция позволяет проверить корректность даты-времени, записанных в виде строки. Если строка корректная — сразу будет создан объект Date. |
Так же объект Date содержит ряд методов для работы с UTC-датами. Эти функции полностью аналогичны уже рассмотреным, но содержат в имени префикс «UTC» и работают только с «универсальным» временем: getUTCSeconds, setUTCFullYear и т.д.
Рассмотрим пример работы с датами:
А вот результат работы этого скрипта:
Как видите, представление даты существенно отличается в зависимости от используемого формата. Поэтому при работе с датой-временем надо придерживаться нескольких простых правил:
1. По возможности пользоваться UTC или GMT-форматами. Особенно это важно при создани распределённых решений (например, клиентов платёжных систем). Использование общего опорного времени даст вам гарантии (пусть и не стопроцентные), что и вы и ваш удалённый партнёр будете одинаково интерпретировать получаемые данные.
2. Локализованные дату и время имеет смысл использовать только при выводе их пользователю. Во всех остальных случаях от локализованных данных лучше отказаться.
3. Если всё же приходится использовать локальные дату и время — не забывайте учитывать смещение локального времени относительно опорного (UTC или GMT).
Следование этим правилам избавит вас от большинства логических багов и недочётов, а значит сделает ваш код более стабильным и качественным.
JavaScript — Урок 11. Дата, представление и обработка
В JavaScript дата определяется количеством миллисекунд, прошедших с 1 января 1970 года.
Для работы с датой и временем применяется встроенный объект Date . Этот объект не имеет свойств, но обладает несколькими методами, позволяющими устанавливать и изменять дату и время.
Объект Date создается с помощью оператороа new и конструктора — Date .
Например:
var myData=new Date();
Значением переменной myData будет текущая дата и время:
Методами объекта Date можно получать отдельно значения месяца, дня недели, часов, минут и секунд:
- getDate — возвращает число в диапазоне от 1 до 31, представляющее число месяца.
- getHours — возвращает час суток в диапазоне от 0 (полночь) до 23.
- getMinutes — возвращает минуты в диапазоне от 0 до 59.
- getSeconds — возвращает секунды в диапазоне от 0 до 59.
Предположим, мы хотим написать сценарий, который будет определять текущее время и выводить его в формате «чч:мм:сс».
Javascript дата
Теперь напишем саму функцию nTime() :
function nTime(obj) { var t=new Date(); var h=t.getHours(); var m=t.getMinutes(); var s=t.getSeconds(); var result=h+»:»+m+»:»+s; obj.res.value=result; }
* как вы помните методы отделяются от объекта точкой, об этом мы говорили в уроке 3 * Как видите, все просто. Сначала определяем текущее время, а потом с помощью методов извлекаем из него отдельные значения часов, минут и секунд.
Здесь еще хочется пояснить строку var result=h+»:»+m+»:»+s . Впервые мы столкнулись с необходимостью выводить в результат, как значения переменных, так и простой текст. В принципе ничего сложного: переменные пишутся как есть, текст берется в кавычки, а знак + осуществляет операцию конкатенации, т.е. их объединения.
В нашем примере остался один недочет, мы хотели, чтобы время выводилось в формате «чч:мм:сс», а сейчас оно выводится в формате «ч:м:с». Т.е., в 5 утра, время будет отображаться как «5:0:0», а хотелось бы так: «05:00:00» (что более привычно). В качестве домашнего задания можете попробовать это исправить. Например, с помощью оператора if и строкового литерала «0» (идея проста: если часов меньше 10, то в результат перед h написать «0» и так со всеми переменными).
А пока продолжим изучать методы объекта Date :
- getDay — возвращает день недели, как целое число от 0 (воскресенье) до 6 (суббота).
- getMonth — возвращает номер месяца в году, как целое число от 0 (январь) до 11 (декабрь).
- getYear — возвращает год в виде двух последних цифр (getFullYear — возвращает год в виде четырех цифр).
* К сожалению, начиная с 2000 года, есть проблема с отображением года в разных браузерах. Метод getYear в IE отображает полный год (вместо двух последних цифр), а FireFox вместо XX отображает 1XX (т.е. подставляет 1). Поэтому предпочтительнее использовать метод getFullYear.
Давайте напишем сценарий, который будет определять текущую дату и выводить ее в формате «число месяц год».
Код html-страницы будет простой:
Javascript дата
Теперь напишем саму функцию tData() :
Function tData(obj) { var s; var t=new Date(); var y=t.getFullYear(); var d=t.getDate(); var mon=t.getMonth(); switch (mon) { case 0: s=»января»; break; case 1: s=»февраля»; break; case 2: s=»марта»; break; case 3: s=»апреля»; break; case 4: s=»мае»; break; case 5: s=»июня»; break; case 6: s=»июля»; break; case 7: s=»августа»; break; case 8: s=»сентября»; break; case 9: s=»октября»; break; case 10: s=»ноября»; break; case 11: s=»декабря»; break; } var result=d+» «+s+» «+y; obj.res.value=result; }
Получилось подлиннее, чем в первом примере, т.к. приходится переводить на русский язык названия месяцев.
Рассмотренные выше методы позволяют получать дату. Если же нам потребуется установить дату, то следует использовать следующие методы:
- setDate — устанавливает число месяца в диапазоне от 1 до 31.
- setHours — устанавливает час для текущего времени в диапазоне от 0 (полночь) до 23.
- setMinutes — устанавливает минуты в диапазоне от 0 до 59.
- setSeconds — устанавливает секунды в диапазоне от 0 до 59.
- setYear — устанавливает значение года.
- setMonth — устанавливает значение месяца в диапазоне от 0 (январь) до 11 (декабрь).
- setTime — устанавливает значение объекта Date и возвращает количество миллисекунд, прошедших с 1 января 1970 года.
Так, если нам потребуется задать дату 06 декабря 2010 года, в функции мы будем иметь следующий код:
Var t=new Date(); var y=t.setYear(2010); var d=t.setDate(6); var mon=t.setMonth(11); …
Задать дату можно прямо в конструкторе, указав в качестве параметра строку формата «месяц, день, год часы:минуты:секунды»:
Var t=new Date(«Feb,10,1975 17:45:10»);
Значение часов, минут и секунд можно опустить (они будут равны нулю):
Var t=new Date(«Feb,10,1975»);
Эту же дату можно задать с помощью чисел, перечислив через запятую год, месяц, число, часы, минуты, секунды:
Var t=new Date(75, 1, 10, 17, 45, 10);
Или же, опуская часы, минуты и секунды (они будут равны нулю):
Var t=new Date(75, 1, 10);
* Есть проблема: IE год отображать не хочет, поэтому лучше эти варианты не использовать.
Вот собственно и все, вы вполне готовы самостоятельно написать сценарий, который при загрузке страницы отобразит дату, время и день ее посещения (в нормальном русском виде). Удачи!