Перейти к содержимому

Как из миллисекунд получить дату javascript

  • автор:

Date.parse()

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

Синтаксис

Date.parse(dateString)
new Date(dateString)

Параметры

Строковое представление даты из RFC2822 (на английском, на русском) или ISO 8601. Могут использоваться и другие форматы, но результаты в таком случае будут непредсказуемые.

Описание

Метод parse() принимает строку с датой (например, «Dec 25, 1995» ) и возвращает количество миллисекунд, прошедших с 1 января 1970 года 00:00:00 по UTC. Этот метод полезен для установки значения даты из строкового значения, например, в сочетании с методом setTime() о объектом Date .

По данному строковому представлению времени метод parse() возвращает значение времени. Он принимает синтаксис даты из RFC2822 / IETF (RFC2822 раздел 3.3 — на английском, на русском), например, «Mon, 25 Dec 1995 13:30:00 GMT» . Он понимает аббревиатуры континентальных часовых поясов США, но для общего пользования используйте смещение часовых поясов, например, «Mon, 25 Dec 1995 13:30:00 +0430» (4 часа 30 минут к востоку от Гринвичского меридиана). Если часовой пояс не определён и строка является форматом ISO, распозначаемым ES5, предполагается, что часовым поясом является UTC. GMT и UTC считаются эквивалентными. Местный часовой пояс используется для интерпретации аргумента в формате RFC2822 из раздела 3.3 (на английском, на русском) (или в любом другом формате, не распознаваемым как ISO 8601 в ES5), если он не содержит информации о часовом поясе.

Поддержка формата ISO-8601 в ECMAScript 5

Строка с датой и временем может быть в формате ISO 8601. Например, могут быть переданы и разобраны строки «2011-10-10» (только дата) или «2011-10-10T14:48:00» (дата и время). Для интерпретации аргументов в формате ISO 8601, не содержащих информацию о часовом поясе, используется часовой пояс UTC.

Хотя во время разбора строки с датой и используется спецификатор часового пояса, возвращаемое значение всегда содержит количество миллисекунд между 1 января 1970 года 00:00:00 по UTC и моментом времени, представленным аргументом.

Поскольку метод parse() является статическим методом объекта Date , вы всегда должны использовать его как Date.parse() .

Различия в предполагаемом часовом поясе

Для строки даты «March 7, 2014» , метод parse() будет предполагать местный часовой пояс, но если строка дана в формате ISO, например «2014-03-07» , он будет предполагать, что часовой пояс равен UTC. Поэтому объекты Date , созданные из этих строк, если в системе местный часовой пояс не равен UTC, будут представлять разные моменты времени. Это значит, что две строки с датами, которые выглядят одинаковыми, могут дать два разных значения в зависимости от формата преобразуемой строки.

Откат к зависимым от реализации форматам даты

В спецификации ECMAScript говорится: если строка не соответствует стандартному формату, функция может откатиться к любой зависимой от реализации эвристике, либо к зависимому от реализации алгоритму разбора. Нераспознанные строки, либо даты, содержащие недопустимые значения элементов в строках формата ISO, должны при вызове Date.parse() возвращать NaN .

Однако, недопустимые значения в строке даты, не распознанные как формат ISO, как определено ES5 могут возвращать, а могут и не возвращать NaN в качестве результата, в зависимости от браузера и предоставленных значений, например:

// Строка не в формате ISO с недопустимыми значениями даты new Date("23/25/2014"); 

будет рассматриваться как местная дата 25 ноября 2015 года в Firefox 30 и как недопустимая дата в Safari 7. Однако, если строка распознана как строка в формате ISO и она содержит недопустимые значения, метод вернёт NaN во всех браузерах, совместимых с ES5:

// Строка в формате ISO с недопустимыми значениями даты new Date("2014-25-23").toISOString(); // вернёт "RangeError: invalid date" во всех браузерах, совместимых с ES5 

Реализация эвристики SpiderMonkey может быть найдена в файле jsdate.cpp . Строка «10 06 2014» является примером не подходящей под формат ISO и поэтому её разбор откатывается на пользовательскую подпрограмму. Так же смотрите эту грубую схему работы разбора строки.

new Date("10 06 2014"); 

будет рассматриваться как местная дата 6 октября 2014 года, а не 10 июня 2014 года. Другие примеры:

new Date("foo-bar 2014").toString(); // вернёт: "Invalid Date" Date.parse("foo-bar 2014"); // вернёт: NaN 

Примеры

Пример: использование метода Date.parse()

Если переменная IPOdate содержит существующий объект Date , она может быть установлена в 9 августа 1995 года (по местному времени) следующим способом:

.setTime(Date.parse("Aug 9, 1995")); 

Ещё несколько примеров разбора нестандартных строк с датами:

.parse("Aug 9, 1995"); 

Вернёт 807937200000 в часовом поясе GMT-0300, и другие значения в других часовых поясах, так как поскольку строка не определяет часовой пояс и не находится в формате ISO, то часовой пояс по умолчанию равен местному часовому поясу.

.parse("Wed, 09 Aug 1995 00:00:00 GMT"); 

Вернёт 807926400000 вне зависимости от местного часового пояса, поскольку предоставлен спецификатор GMT (всемирное координированное время).

.parse("Wed, 09 Aug 1995 00:00:00"); 

Вернёт 807937200000 в часовом поясе GMT-0300, и другие значения в других часовых поясах, так как поскольку строка не определяет часовой пояс и не находится в формате ISO, то часовой пояс по умолчанию равен местному часовому поясу.

.parse("Thu, 01 Jan 1970 00:00:00 GMT"); 

Вернёт 0 вне зависимости от местного часового пояса, поскольку предоставлен спецификатор GMT (всемирное координированное время).

.parse("Thu, 01 Jan 1970 00:00:00"); 

Вернёт 14400000 в часовом поясе GMT-0400, и другие значения в других часовых поясах, так как поскольку строка не определяет часовой пояс и не находится в формате ISO, то используется местный часовой пояс.

.parse("Thu, 01 Jan 1970 00:00:00 GMT-0400"); 

Вернёт 14400000 вне зависимости от местного часового пояса, поскольку предоставлен спецификатор GMT (всемирное координированное время).

Спецификации

Specification
ECMAScript Language Specification
# sec-date.parse

Совместимость с браузерами

BCD tables only load in the browser

Смотрите также

Found a content problem with this page?

  • Edit the page on GitHub.
  • Report the content issue.
  • View the source on GitHub.

This page was last modified on 4 авг. 2023 г. by MDN contributors.

Your blueprint for a better internet.

MDN

Support

  • Product help
  • Report an issue

Our communities

Developers

  • Web Technologies
  • Learn Web Development
  • MDN Plus
  • Hacks Blog
  • Website Privacy Notice
  • Cookies
  • Legal
  • Community Participation Guidelines

Visit Mozilla Corporation’s not-for-profit parent, the Mozilla Foundation.
Portions of this content are ©1998– 2024 by individual mozilla.org contributors. Content available under a Creative Commons license.

Базовые операции с датами

Создать дату в JavaScript можно с помощью конструктора Date() , который при вызове без параметров ( const date = new Date() ) вернет дату и время вызова в формате YYYY-MM-DDTHH:mm:ss.sssZ где YYYY-MM-DD — год, месяц и день, T — разделитель между датой и временем, HH:mm:ss.sss — часы, минут, секунды и миллисекунды, а Z — настройки временной зоны. Даты в JavaScript представлены в виде количества миллисекунд, прошедших с 1 января 1970 года по UTC поэтому новую дату можно так же создать с помощью метода .now() глобального объекта Date , который вернет количество миллисекунд до вызова.

const date1 = new Date(); //2023-08-29T11:30:31.224Z const date2 = Date.now(); //1693308631228

Поскольку даты содержат точное количество миллисекунд, прошедших с 1 января 1970 года по UTC разницу между ними можно использовать для замера времени между началом и окончанием выполнения какой-либо операции. Для таких целей лучше использовать метод Date.now() вместо конструктора т.к. он гораздо быстрее потому что не создает при вызове промежуточных объектов и возвращает сразу количество миллисекунд, что может быть важно при проведении большого количества замеров подряд.

const start = Date.now(); (function someCalcs() < //какие-то сложные вычисления >)(); console.log(`Время выполнения: $мс`);

Что бы задать конкретную дату нужно передать ее в конструктор в одном из следующих форматов:

  • Указать год, месяц, день и т.д. цифрами через запятую
  • Строка вида “ YYYY-MM-DDTHH:mm:ss.sssZ” или ‘December 31, 2023 23:59:59’ фактически такой способ является неявным вызовом метода Date.parse()
  • Другой объект даты
  • Количество миллисекунд, прошедших с 1 января 1970 года по UTC

При указании даты строкой или перечислением цифр не обязательно указывать точное до мс значение. Если не передать количество мс, секунд, минут или часов — они будут автоматически установлены на 0, дни на 1, месяца на 0 (нумерация месяцев начинается с 0). При этом год нужно передавать полностью, а не последние 2 цифры.

Внести изменения в уже существующий объект даты, можно с помощью методов, которые имеют название .set как .setDate() для дней ( .getDay() вернет день недели числом от 0 до 6), .setFullYear() для года ( .setYear() был удален из стандарта т.к. мог принимать не полное значение года) или .setHours() для часов. Если указать при объявлении даты или передать в один из таких методов несуществующее значение, например 20-й месяц или 25-й час — дата автоматически отформатируется и вместо 25 часов добавит к значений дней единицу, а часы установит на 1.

Важно помнить что Date ссылочный тип данных и два объекта, содержащие одинаковые даты не будут равны друг другу при любом типе сравнения.

const newYear1 = new Date(2023, 11, 31, 23, 59, 59, 999); //2023-12-31T18:59:59.999Z const newYear2 = new Date("2023-12-31T18:59:59.999"); //2023-12-31T13:59:59.999Z const newYear3 = new Date(1704031199999); //передаем количество мс //2023-12-31T13:59:59.999Z console.log(newYear1 === newYear2); //false const ms = newYear1 - newYear2; //при этом разница в ms = 0 //0 newYear1.setDate(32); //устанавливаем несуществующий день в месяце console.log(newYear1); //2024-01-01T18:59:59.999Z дата подстроится под заданные параметры

По аналогии с методами для изменения значений даты, существуют методы для получения части значений. Такие методы имеют название .get или .getUTC для получения получения значений по Гринвичу.

const date = new Date(); //дата и время на момент вызова date.getHours(); //значение часов в месте вызова date.getUTCHours() //значение часов по Гринвичу

Работа с форматированием дат

В JavaScript доступны методы для вывода дат в виде строки разных форматов:

  • .toString()
    • не принимает параметров и возвращает строку в виде: день недели (Mon), первые три буквы месяца (Aug), день (28), год (2023), время без мс (12:45:30), часовой пояс относительно UTC (GMT-0700) и название часового пояса в скобках (Pacific Daylight Time).
    • аналогичен .toString() , но возвращает только дату без времени.
    • аналогичен .toString() , но возвращает только время без даты.
    • аналогичен .toString() , но возвращает дату по Гринвичу.
    • принимает настройки локализации (язык и название страны) и опции (например формат отображения часов в виде 24 или am/pm) и возвращает строку в принятом в указанной стране и языке формате.
    • аналогичен .toLocalString() , но возвращает только дату без времени.
    • аналогичен .toLocalString() , но возвращает только время без даты.
    const date = new Date(); //стандартное форматирование //2023-08-29T14:47:07.820Z console.log(date.toString()); //в строку //Tue Aug 29 2023 19:47:07 GMT+0500 (Yekaterinburg Standard Time) console.log(date.toDateString()); //только дата //Tue Aug 29 2023 console.log(date.toTimeString()); //только время //19:47:07 GMT+0500 (Yekaterinburg Standard Time) console.log(date.toUTCString()); //по Гринвичу //Tue, 29 Aug 2023 14:47:07 GMT console.log(date.toLocaleString("en-US")); //англичйский США //8/29/2023, 7:47:07 PM console.log(date.toLocaleString("en-US", < hour12: false >)); //то же но 24 часовой формат //8/29/2023, 19:47:07 console.log(date.toLocaleDateString("de-DE")); //только дата немецкий Германия //29.8.2023 console.log(date.toLocaleTimeString("ko-KR")); //только время корейский Корея //오후 7:47:07

    Date можно сериализовать в формат JSON с помощью метода .toJSON() . Конструктор конечно же прекрасно распарсит такую строку.

    const toJSON = new Date().toJSON(); //2023-08-29T14:51:52.158Z const toDate = new Date(toJSON); //2023-08-29T14:51:52.158Z console.log(typeof toJSON); //string console.log(typeof toDate);//object

    Заключение

    Понимание концепций работы с датами и навык их применения позволят вам создавать более динамичные и функциональные веб-приложения на JavaScript. Не забывайте продолжать изучать и практиковать использование дат в своих проектах, чтобы стать опытным и уверенным разработчиком. Надеюсь что данная статья была полезна для понимания столь важной темы, а если вы хотите изучить основы языка или детально погрузиться в устройство JavaScript я подготовил подробные курсы.

    Дата и Время

    Материал на этой странице устарел, поэтому скрыт из оглавления сайта.

    Более новая информация по этой теме находится на странице https://learn.javascript.ru/date.

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

    Создание

    Для создания нового объекта типа Date используется один из синтаксисов:

    Создаёт объект Date с текущей датой и временем:

    var now = new Date(); alert( now );

    new Date(milliseconds)

    Создаёт объект Date , значение которого равно количеству миллисекунд (1/1000 секунды), прошедших с 1 января 1970 года GMT+0.

    // 24 часа после 01.01.1970 GMT+0 var Jan02_1970 = new Date(3600 * 24 * 1000); alert( Jan02_1970 );

    new Date(datestring)

    Если единственный аргумент – строка, используется вызов Date.parse (см. далее) для чтения даты из неё.

    new Date(year, month, date, hours, minutes, seconds, ms)

    Дату можно создать, используя компоненты в местной временной зоне. Для этого формата обязательны только первые два аргумента. Отсутствующие параметры, начиная с hours считаются равными нулю, а date – единице.

    • Год year должен быть из 4 цифр.
    • Отсчёт месяцев month начинается с нуля 0. Например:

    new Date(2011, 0, 1, 0, 0, 0, 0); // // 1 января 2011, 00:00:00 new Date(2011, 0, 1); // то же самое, часы/секунды по умолчанию равны 0

    Дата задана с точностью до миллисекунд:

    var date = new Date(2011, 0, 1, 2, 3, 4, 567); alert( date ); // 1.01.2011, 02:03:04.567

    Получение компонентов даты

    Для доступа к компонентам даты-времени объекта Date используются следующие методы:

    getFullYear() Получить год (из 4 цифр) getMonth() Получить месяц, от 0 до 11. getDate() Получить число месяца, от 1 до 31. getHours(), getMinutes(), getSeconds(), getMilliseconds() Получить соответствующие компоненты.

    Не getYear() , а getFullYear()

    Некоторые браузеры реализуют нестандартный метод getYear() . Где-то он возвращает только две цифры из года, где-то четыре. Так или иначе, этот метод отсутствует в стандарте JavaScript. Не используйте его. Для получения года есть getFullYear() .

    Дополнительно можно получить день недели:

    getDay() Получить номер дня в неделе. Неделя в JavaScript начинается с воскресенья, так что результат будет числом от 0(воскресенье) до 6(суббота).

    Все методы, указанные выше, возвращают результат для местной временной зоны.

    Существуют также UTC-варианты этих методов, возвращающие день, месяц, год и т.п. для зоны GMT+0 (UTC): getUTCFullYear() , getUTCMonth() , getUTCDay() . То есть, сразу после «get» вставляется «UTC» .

    Если ваше локальное время сдвинуто относительно UTC, то следующий код покажет разные часы:

    // текущая дата var date = new Date(); // час в текущей временной зоне alert( date.getHours() ); // сколько сейчас времени в Лондоне? // час в зоне GMT+0 alert( date.getUTCHours() );

    Кроме описанных выше, существуют два специальных метода без UTC-варианта:

    Возвращает число миллисекунд, прошедших с 1 января 1970 года GMT+0, то есть того же вида, который используется в конструкторе new Date(milliseconds) .

    Возвращает разницу между местным и UTC-временем, в минутах.

    alert( new Date().getTimezoneOffset() ); // Для GMT-1 выведет 60

    Установка компонентов даты

    Следующие методы позволяют устанавливать компоненты даты и времени:

    • setFullYear(year [, month, date])
    • setMonth(month [, date])
    • setDate(date)
    • setHours(hour [, min, sec, ms])
    • setMinutes(min [, sec, ms])
    • setSeconds(sec [, ms])
    • setMilliseconds(ms)
    • setTime(milliseconds) (устанавливает всю дату по миллисекундам с 01.01.1970 UTC)

    Все они, кроме setTime() , обладают также UTC-вариантом, например: setUTCHours() .

    Как видно, некоторые методы могут устанавливать несколько компонентов даты одновременно, в частности, setHours . При этом если какая-то компонента не указана, она не меняется. Например:

    var today = new Date; today.setHours(0); alert( today ); // сегодня, но час изменён на 0 today.setHours(0, 0, 0, 0); alert( today ); // сегодня, ровно 00:00:00.

    Автоисправление даты

    Автоисправление – очень удобное свойство объектов Date . Оно заключается в том, что можно устанавливать заведомо некорректные компоненты (например 32 января), а объект сам себя поправит.

    var d = new Date(2013, 0, 32); // 32 января 2013 . alert(d); // . это 1 февраля 2013!

    Неправильные компоненты даты автоматически распределяются по остальным.

    Например, нужно увеличить на 2 дня дату «28 февраля 2011». Может быть так, что это будет 2 марта, а может быть и 1 марта, если год високосный. Но нам обо всем этом думать не нужно. Просто прибавляем два дня. Остальное сделает Date :

    var d = new Date(2011, 1, 28); d.setDate(d.getDate() + 2); alert( d ); // 2 марта, 2011

    Также это используют для получения даты, отдалённой от имеющейся на нужный промежуток времени. Например, получим дату на 70 секунд большую текущей:

    var d = new Date(); d.setSeconds(d.getSeconds() + 70); alert( d ); // выведет корректную дату

    Можно установить и нулевые, и даже отрицательные компоненты. Например:

    var d = new Date; d.setDate(1); // поставить первое число месяца alert( d ); d.setDate(0); // нулевого числа нет, будет последнее число предыдущего месяца alert( d );
    var d = new Date; d.setDate(-1); // предпоследнее число предыдущего месяца alert( d );

    Преобразование к числу, разность дат

    Когда объект Date используется в числовом контексте, он преобразуется в количество миллисекунд:

    alert(+new Date) // +date то же самое, что: +date.valueOf()

    Важный побочный эффект: даты можно вычитать, результат вычитания объектов Date – их временная разница, в миллисекундах.

    Это используют для измерения времени:

    var start = new Date; // засекли время // что-то сделать for (var i = 0; i < 100000; i++) < var doSomething = i * i * i; >var end = new Date; // конец измерения alert( "Цикл занял " + (end - start) + " ms" );

    Бенчмаркинг

    Допустим, у нас есть несколько вариантов решения задачи, каждый описан функцией.

    Как узнать, какой быстрее?

    Для примера возьмём две функции, которые бегают по массиву:

    function walkIn(arr) < for (var key in arr) arr[key]++ >function walkLength(arr)

    Чтобы померить, какая из них быстрее, нельзя запустить один раз walkIn , один раз walkLength и замерить разницу. Одноразовый запуск ненадёжен, любая мини-помеха исказит результат.

    Для правильного бенчмаркинга функция запускается много раз, чтобы сам тест занял существенное время. Это сведёт влияние помех к минимуму. Сложную функцию можно запускать 100 раз, простую – 1000 раз…

    Померяем, какая из функций быстрее:

    var arr = []; for (var i = 0; i < 1000; i++) arr[i] = 0; function walkIn(arr) < for (var key in arr) arr[key]++; >function walkLength(arr) < for (var i = 0; i < arr.length; i++) arr[i]++; >function bench(f) < var date = new Date(); for (var i = 0; i < 10000; i++) f(arr); return new Date() - date; >alert( 'Время walkIn: ' + bench(walkIn) + 'мс' ); alert( 'Время walkLength: ' + bench(walkLength) + 'мс' );

    Теперь представим себе, что во время первого бенчмаркинга bench(walkIn) компьютер что-то делал параллельно важное (вдруг) и это занимало ресурсы, а во время второго – перестал. Реальная ситуация? Конечно реальна, особенно на современных ОС, где много процессов одновременно.

    Гораздо более надёжные результаты можно получить, если весь пакет тестов прогнать много раз.

    var arr = []; for (var i = 0; i < 1000; i++) arr[i] = 0; function walkIn(arr) < for (var key in arr) arr[key]++; >function walkLength(arr) < for (var i = 0; i < arr.length; i++) arr[i]++; >function bench(f) < var date = new Date(); for (var i = 0; i < 1000; i++) f(arr); return new Date() - date; >// bench для каждого теста запустим много раз, чередуя var timeIn = 0, timeLength = 0; for (var i = 0; i < 100; i++) < timeIn += bench(walkIn); timeLength += bench(walkLength); >alert( 'Время walkIn: ' + timeIn + 'мс' ); alert( 'Время walkLength: ' + timeLength + 'мс' );

    Более точное время с performance.now()

    В современных браузерах (кроме IE9-) вызов performance.now() возвращает количество миллисекунд, прошедшее с начала загрузки страницы. Причём именно с самого начала, до того, как загрузился HTML-файл, если точнее – с момента выгрузки предыдущей страницы из памяти.

    Так что это время включает в себя всё, включая начальное обращение к серверу.

    Его можно посмотреть в любом месте страницы, даже в , чтобы узнать, сколько времени потребовалось браузеру, чтобы до него добраться, включая загрузку HTML.

    Возвращаемое значение измеряется в миллисекундах, но дополнительно имеет точность 3 знака после запятой (до миллионных долей секунды!), поэтому можно использовать его и для более точного бенчмаркинга в том числе.

    console.time(метка) и console.timeEnd(метка)

    Для измерения с одновременным выводом результатов в консоли есть методы:

    • console.time(метка) – включить внутренний хронометр браузера с меткой.
    • console.timeEnd(метка) – выключить внутренний хронометр браузера с меткой и вывести результат.

    Параметр «метка» используется для идентификации таймера, чтобы можно было делать много замеров одновременно и даже вкладывать измерения друг в друга.

    В коде ниже таймеры walkIn , walkLength – конкретные тесты, а таймер «All Benchmarks» – время «на всё про всё»:

    var arr = []; for (var i = 0; i < 1000; i++) arr[i] = 0; function walkIn(arr) < for (var key in arr) arr[key]++; >function walkLength(arr) < for (var i = 0; i < arr.length; i++) arr[i]++; >function bench(f) < for (var i = 0; i < 10000; i++) f(arr); >console.time("All Benchmarks"); console.time("walkIn"); bench(walkIn); console.timeEnd("walkIn"); console.time("walkLength"); bench(walkLength); console.timeEnd("walkLength"); console.timeEnd("All Benchmarks");

    При запуске этого примера нужно открыть консоль, иначе вы ничего не увидите.

    Внимание, оптимизатор!

    Современные интерпретаторы JavaScript делают массу оптимизаций, например:

    1. Автоматически выносят инвариант, то есть постоянное в цикле значение типа arr.length , за пределы цикла.
    2. Стараются понять, значения какого типа хранит данная переменная или массив, какую структуру имеет объект и, исходя из этого, оптимизировать внутренние алгоритмы.
    3. Выполняют простейшие операции, например сложение явно заданных чисел и строк, на этапе компиляции.
    4. Могут обнаружить, что некий код, например присваивание к неиспользуемой локальной переменной, ни на что не влияет и вообще исключить его из выполнения, хотя делают это редко.

    Эти оптимизации могут влиять на результаты тестов, поэтому измерять скорость базовых операций JavaScript («проводить микробенчмаркинг») до того, как вы изучите внутренности JavaScript-интерпретаторов и поймёте, что они реально делают на таком коде, не рекомендуется.

    Форматирование и вывод дат

    Во всех браузерах, кроме IE10-, поддерживается новый стандарт Ecma 402, который добавляет специальные методы для форматирования дат.

    Это делается вызовом date.toLocaleString(локаль, опции) , в котором можно задать много настроек. Он позволяет указать, какие параметры даты нужно вывести, и ряд настроек вывода, после чего интерпретатор сам сформирует строку.

    Пример с почти всеми параметрами даты и русским, затем английским (США) форматированием:

    var date = new Date(2014, 11, 31, 12, 30, 0); var options = < era: 'long', year: 'numeric', month: 'long', day: 'numeric', weekday: 'long', timezone: 'UTC', hour: 'numeric', minute: 'numeric', second: 'numeric' >; alert( date.toLocaleString("ru", options) ); // среда, 31 декабря 2014 г. н.э. 12:30:00 alert( date.toLocaleString("en-US", options) ); // Wednesday, December 31, 2014 Anno Domini 12:30:00 PM

    Вы сможете подробно узнать о них в статье Intl: интернационализация в JavaScript, которая посвящена этому стандарту.

    Методы вывода без локализации:

    toString() , toDateString() , toTimeString() Возвращают стандартное строчное представление, не заданное жёстко в стандарте, а зависящее от браузера. Единственное требование к нему – читаемость человеком. Метод toString возвращает дату целиком, toDateString() и toTimeString() – только дату и время соответственно.

    var d = new Date(); alert( d.toString() ); // вывод, похожий на 'Wed Jan 26 2011 16:40:50 GMT+0300'

    toUTCString() То же самое, что toString() , но дата в зоне UTC.

    toISOString() Возвращает дату в формате ISO Детали формата будут далее. Поддерживается современными браузерами, не поддерживается IE8-.

    var d = new Date(); alert( d.toISOString() ); // вывод, похожий на '2011-01-26T13:51:50.417Z'

    Если хочется иметь большую гибкость и кросс-браузерность, то также можно воспользоваться специальной библиотекой, например Moment.JS или написать свою функцию форматирования.

    Разбор строки, Date.parse

    Все современные браузеры, включая IE9+, понимают даты в упрощённом формате ISO 8601 Extended.

    Этот формат выглядит так: 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(str) разбирает строку str в таком формате и возвращает соответствующее ей количество миллисекунд. Если это невозможно, Date.parse возвращает NaN .

    var msUTC = Date.parse('2012-01-26T13:51:50.417Z'); // зона UTC alert( msUTC ); // 1327571510417 (число миллисекунд)

    С таймзоной -07:00 GMT :

    var ms = Date.parse('2012-01-26T13:51:50.417-07:00'); alert( ms ); // 1327611110417 (число миллисекунд)

    Формат дат для IE8-

    До появления спецификации ECMAScript 5 формат не был стандартизован, и браузеры, включая IE8-, имели свои собственные форматы дат. Частично, эти форматы пересекаются.

    Например, код ниже работает везде, включая старые IE:

    var ms = Date.parse("January 26, 2011 13:51:50"); alert( ms );

    Вы также можете почитать о старых форматах IE в документации к методу MSDN Date.parse.

    Конечно же, сейчас лучше использовать современный формат. Если же нужна поддержка IE8-, то метод Date.parse , как и ряд других современных методов, добавляется библиотекой es5-shim.

    Метод Date.now()

    Метод Date.now() возвращает дату сразу в виде миллисекунд.

    Технически, он аналогичен вызову +new Date() , но в отличие от него не создаёт промежуточный объект даты, а поэтому – во много раз быстрее.

    Его использование особенно рекомендуется там, где производительность при работе с датами критична. Обычно это не на веб-страницах, а, к примеру, в разработке игр на JavaScript.

    Итого

    • Дата и время представлены в JavaScript одним объектом: Date. Создать «только время» при этом нельзя, оно должно быть с датой. Список методов Date вы можете найти в справочнике Date или выше.
    • Отсчёт месяцев начинается с нуля.
    • Отсчёт дней недели (для getDay() ) тоже начинается с нуля (и это воскресенье).
    • Объект Date удобен тем, что автокорректируется. Благодаря этому легко сдвигать даты.
    • При преобразовании к числу объект Date даёт количество миллисекунд, прошедших с 1 января 1970 UTC. Побочное следствие – даты можно вычитать, результатом будет разница в миллисекундах.
    • Для получения текущей даты в миллисекундах лучше использовать Date.now() , чтобы не создавать лишний объект Date (кроме IE8-)
    • Для бенчмаркинга лучше использовать performance.now() (кроме IE9-), он в 1000 раз точнее.

    Задачи

    Вывести дату в формате дд.мм.гг

    важность: 3

    Напишите функцию formatDate(date) , которая выводит дату date в формате дд.мм.гг :

    var d = new Date(2014, 0, 30); // 30 января 2014 alert( formatDate(d) ); // '30.01.14'

    P.S. Обратите внимание, ведущие нули должны присутствовать, то есть 1 января 2001 должно быть 01.01.01, а не 1.1.1.

    Получим компоненты один за другим.

      День можно получить как date.getDate() . При необходимости добавим ведущий ноль:

    var dd = date.getDate(); if (dd < 10) dd = '0' + dd;
    var mm = date.getMonth() + 1; // месяц 1-12 if (mm < 10) mm = '0' + mm;
    var yy = date.getFullYear() % 100; if (yy < 10) yy = '0' + yy;

    Date.prototype.getMilliseconds()

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

    Синтаксис

    dateObj.getMilliseconds()

    Параметры

    Возвращаемое значение

    Значение, возвращённое методом getMilliseconds() , является целым числом от 0 до 999.

    Примеры

    Пример: использование метода getMilliseconds()

    В следующем примере переменной milliseconds присваиваются миллисекунды текущего времени:

    let today = new Date(); let milliseconds = today.getMilliseconds(); console.log(milliseconds); // 709 

    Спецификации

    Specification
    ECMAScript Language Specification
    # sec-date.prototype.getmilliseconds

    Совместимость с браузерами

    BCD tables only load in the browser

    Смотрите также

    • Date.prototype.getUTCMilliseconds()
    • Date.prototype.setMilliseconds()

    Found a content problem with this page?

    • Edit the page on GitHub.
    • Report the content issue.
    • View the source on GitHub.

    This page was last modified on 3 авг. 2023 г. by MDN contributors.

    Your blueprint for a better internet.

    MDN

    Support

    • Product help
    • Report an issue

    Our communities

    Developers

    • Web Technologies
    • Learn Web Development
    • MDN Plus
    • Hacks Blog
    • Website Privacy Notice
    • Cookies
    • Legal
    • Community Participation Guidelines

    Visit Mozilla Corporation’s not-for-profit parent, the Mozilla Foundation.
    Portions of this content are ©1998– 2024 by individual mozilla.org contributors. Content available under a Creative Commons license.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *