Форматы даты

Ввод даты в JavaScript

В JavaScript существует 3 основных типа формата ввода даты:

Тип Пример
Запись по ISO "2015-03-25" (Международный стандарт)
Короткая запись "03/25/2015"
Длинная "Mar 25 2015" или "25 Mar 2015"

Формат ISO соответствует строгому стандарту JavaScript.

Другие форматы определены не так хорошо, поэтому могут отличаться в зависимости от браузера.

Вывод даты в JavaScript

Независимо от использованного формата ввода, JavaScript по умолчанию выводит дату в формате полной текстовой строки:


Wed Mar 25 2015 03:00:00 GMT+0300 

JavaScript даты в формате ISO

ISO 8601 — это международный стандарт представления даты и времени.

Синтаксис стандарта ISO 8601 (ГГГГ-ММ-ДД, где ГГГГ — полный год, ММ — номер месяца, ДД — день) также является предпочитаемым форматом даты в JavaScript.

Пример (Полная дата):


var d = new Date("2015-03-25"); 

Внимание! Дата вычисляется относительно временной зоны пользователя. Так, в зависимости от местоположения пользователя результат вышеприведенного примера будет колебаться между 24 и 25 мартом.

Дата по ISO (год и месяц)

Дата по стандарту ISO также может записываться и без определения дня (ГГГГ-ММ):


var d = new Date("2015-03"); 

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

Дата по ISO (только год)

Кроме этого, дата по стандарту ISO также может записываться без определения месяца и дня (ГГГГ):


var d = new Date("2015"); 

В этом случае в зависимости от временной зоны пользователя дата будет колебаться между 31 декабря 2014 и 1 января 2015.

Дата по ISO (дата-время)

Дата по стандарту ISO может записываться с добавлением часов, минут и секунд (ГГГГ-ММ-ДДTЧЧ:ММ:ССZ):


var d = new Date("2015-03-25T12:00:00Z"); 

Дата и время разделяются заглавной латинской буквой T.

Время по UTC определяется заглавной латинской буквой Z.

Если вы хотите указать время относительно UTC, то уберите букву Z и добавьте сдвиг в формате +ЧЧ:ММ или -ЧЧ:ММ:


var d = new Date("2015-03-25T12:00:00-06:30"); 

UTC (Универсальные координаты времени — анг. Universal Time Coordinated) то же самое, что GMT (Время по Гринвичу — анг. Greenwich Mean Time).

Внимание! Если в строке даты-времени не указать заглавные латинские буквы T и Z, то результат будет разным в разных браузерах.

Временные зоны

При установки даты без указания временной зоны JavaScript будет использовать временную зону браузера.

При получении даты без указания временной зоны результат будет преобразован во временную зону браузера.

Другими словами: Если дата/время создаются по GMT (Время по Гринвичу), то дата/время будут преобразованы в московское время, если браузер пользователя работает в Москве.

Короткая запись даты

Короткая запись даты имеет следующую форму "ММ/ДД/ГГГГ", где ГГГГ — полный год, ММ — номер месяца, ДД — день.

Пример:


var d = new Date("03/25/2015"); 

ВНИМАНИЕ !

В некоторых браузерах указание месяца и дня без начального нуля может привести к ошибке:


var d = new Date("2015-3-25"); 

Поведение браузера при формате записи "ГГГГ/ММ/ДД" не определено.
Некоторые браузеры попытаются угадать формат. Некоторые вернут значение NaN.


var d = new Date("2015/03/25"); 

Поведение браузера при формате записи "ДД-ММ-ГГГГ" также не определено.
Некоторые браузеры попытаются угадать формат. Некоторые вернут значение NaN.


var d = new Date("25-03-2015"); 

Длинная запись даты

Длинная запись даты имеет следующий синтаксис "МММ ДД ГГГГ":


var d = new Date("Mar 25 2015"); 

Месяц и день могут быть в любом порядке:


var d = new Date("25 Mar 2015"); 

Месяц может записываться либо полностью (January), либо сокращенно (Jan):


var d1 = new Date("January 25 2015"); 
var d2 = new Date("Jan 25 2015"); 

Запятые игнорируются. Имена регистронезависимы:


var d = new Date("JANUARY, 25, 2015"); 

Ввод даты при помощи парсинга

Корректно составленную строку даты можно при помощи метода Date.parse() преобразовать в миллисекунды.

Метод Date.parse() возвращает количество миллисекунд, прошедших с 1 января 1970 до заданной даты:


var msec = Date.parse("March 21, 2012");
document.getElementById("demo").innerHTML = msec; 

В последствии эти миллисекунды можно преобразовать в объект даты:


var msec = Date.parse("March 21, 2012");
var d = new Date(msec);
document.getElementById("demo").innerHTML = d;