Объект 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 года.
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 год отображать не хочет, поэтому лучше эти варианты не использовать.Вот собственно и все, вы вполне готовы самостоятельно написать сценарий, который при загрузке страницы отобразит дату, время и день ее посещения (в нормальном русском виде). Удачи!