35 Вопрос: Где я могу найти документацию по форматированию даты в JavaScript? [закрыто]

вопрос создан в Thu, May 10, 2018 12:00 AM

Я заметил, что функция JavaScript new Date() очень удобна для приема дат в нескольких форматах.

Xmas95 = new Date("25 Dec, 1995 23:15:00")
Xmas95 = new Date("2009 06 12,12:52:39")
Xmas95 = new Date("20 09 2006,12:52:39")

Я не смог найти документацию, где бы отображались все допустимые форматы строк при вызове функции new Date().

Это для преобразования строки в дату. Если мы посмотрим на противоположную сторону, то есть на преобразование объекта даты в строку, до сих пор у меня сложилось впечатление, что в JavaScript нет встроенного API для форматирования объекта даты в строку.

  

Примечание редактора: Следующий подход - это попытка аскера, которая работала в конкретном браузере, но не работает в целом; см. ответы на этой странице , чтобы увидеть некоторые реальные решения.

Сегодня я поиграл с методом toString() в объекте даты, и на удивление он служит для форматирования даты в строки.

var d1 = new Date();
d1.toString('yyyy-MM-dd');       //Returns "2009-06-29" in Internet Explorer, but not Firefox or Chrome
d1.toString('dddd, MMMM ,yyyy')  //Returns "Monday, June 29,2009" in Internet Explorer, but not Firefox or Chrome

Также здесь я не смог найти никакой документации по всем способам форматирования объекта даты в строку.

Где находится документация, в которой перечислены спецификаторы формата, поддерживаемые объектом Date()?

    
1355
  1. ваши примеры на самом деле не работают так, как вы думаете: jsfiddle.net/edelman/WDNVk/1
    2010-12-03 17: 46: 27Z
  2. Извините, передача строк формата в toString работает в .NET и может работать в Java, но, как отметил Джейсон, на самом деле это не работает в Javascript.
    2011-03-08 20: 17: 39Z
  3. Люди помнят - вопросы, независимо от того, насколько они каноничны, должны оставаться вопросами . Пожалуйста, воздержитесь от любых изменений, которые превращают этот вопрос в ответ, уточните и сохраните вместо него answers . Спасибо:)
    2013-11-07 10: 11: 10Z
  4. Я использовал код в этой ссылке msdn.microsoft.com/en-us/library/ie/ff743760 (v = vs.94) .aspx - (date.toLocaleDateString (" ru -US "));
    2014-05-25 16: 52: 20Z
  5. Если будущие посетители этой страницы смущены тем, как большинство ответов относятся к вопросу, я предлагаю прочитать редакция вопроса , особенно (если отличается от описанной выше) редакция 15 @ Eric Muyser - меня, например, смутило отсутствие недопустимого использования Date # toString.
    2015-01-14 19: 25: 34Z
  6. 30 ответов                              30                         

    Я люблю 10 способов форматировать время и дату с помощью JavaScript и Работа с датами .

    По сути, у вас есть три метода, и вы должны объединить строки для себя:

    getDate() // Returns the date
    getMonth() // Returns the month
    getFullYear() // Returns the year
    

    Пример: р>

    р>

    var d = new Date();
    var curr_date = d.getDate();
    var curr_month = d.getMonth() + 1; //Months are zero based
    var curr_year = d.getFullYear();
    console.log(curr_date + "-" + curr_month + "-" + curr_year);
        
    1041
    2019-04-29 02: 36: 07Z
    1. Оба этих сайта имеют ограниченные лицензии. Так что если вы используете код (без разрешения), вы будете нарушать. Моменты ( stackoverflow.com/a/10119138/278976 ) выглядит намного лучше и является лицензией MIT.
      2012-05-24 00: 00: 20Z
    2. @ peller Этот ответ отвечает на вопрос "Как мне отформатировать даты в javascript?" который фактически является названием вопроса. В сущности вопроса он весьма обманчив. И, на ваш взгляд, этот ответ не говорит о форматировании строк с использованием случайных нестандартных или не упомянутых библиотек. Но эта часть вопроса была задана неправильно, как отмечено в комментарии № 1 к вопросу. Таким образом, это отвечает на реальный вопрос, но не на строки формата, которые на самом деле не существуют.
      2012-06-07 14: 01: 13Z
    3. @ McKay; это был не вопрос. Я думаю, что вы либо неправильно понимаете, о чем просит пеллер, либо тупите в своих рассуждениях.
      2012-07-16 16: 34: 24Z
    4. @ codeinthehole "Форматирование дат в Javascript" является вопросом. «до сих пор у меня сложилось впечатление, что в JavaScript нет встроенного API для форматирования объекта даты в строку». но затем говорит о поведении, которое, я думаю, он считает родным в javascript. Не зная, на какую библиотеку он ошибочно ссылается, я думаю, что лучше всего предположить, что он задает вопрос: «Как мне отформатировать даты в javascript?» и я не думаю, что я делаю дикие прыжки.
      2012-07-16 19: 24: 09Z
    5. MM означает 01-12, а не 1-12: 2013-04-17 = > ОК 2013-4-17 = > BAD
      2013-04-17 09: 10: 10Z

    Moment.js

    Это (облегченная) * библиотека дат JavaScript для анализа, манипулирования и форматирования дат.

    var a = moment([2010, 1, 14, 15, 25, 50, 125]);
    a.format("dddd, MMMM Do YYYY, h:mm:ss a"); // "Sunday, February 14th 2010, 3:25:50 pm"
    a.format("ddd, hA");                       // "Sun, 3PM"
    

    (*) облегченный, означающий уменьшенный 9,3 КБ + сжатый файл в минимально возможной конфигурации (февраль 2014 г.)

        
    677
    2014-02-28 16: 04: 03Z
    1. Это также обеспечивает шаблон декоратора вокруг объекта Date вместо обезьяны, пробивающей основной объект, поэтому вы с меньшей вероятностью столкнетесь с конфликтами в будущем.
      2012-11-26 18: 20: 33Z
    2. Пожалуйста, прекратите злоупотреблять словом "облегченный". Даже 5 КБ смехотворно велики для такой функциональности, и на сегодняшний день этот размер увеличился до 19 КБ.
      2013-09-26 06: 22: 43Z
    3. @ Pumbaa80 Я не согласен с тем, что "Даже 5 КБ смехотворно велики для такой функциональности". Вы видели документы? Это чрезвычайно полезная библиотека для работы с датами в JS. Я понимаю, что наличие библиотеки, превышающей пару КБ, для однократного использования базового формата, такого как "D /M /Y", может быть немного излишним, однако различия в несколько КБ становятся незначительными, что упрощает использование библиотеки. , Сопровождаемый код - это хорошая вещь ради нескольких килобайт. Если бы он был уменьшен до +100 КБ, я бы согласился.
      2013-12-04 01: 26: 56Z
    4. @ Tumerj, утверждая, что это полезно, ничего не делает для решения проблемы легкости. Два не связаны.
      2014-05-30 19: 58: 09Z
    5. Нельзя сделать реактивный самолет более легким, удалив двигатель, потому что тогда он становится планером, а не струей. Легкий означает, что что-то имеет только необходимые функциональные возможности для выполнения указанной функции. Ergo, это легковесное решение.
      2014-06-25 00: 47: 42Z

    Если вы уже используете jQuery UI в своем проекте, вы можете использовать встроенный Метод datepicker для форматирования вашего объекта даты:

    $.datepicker.formatDate('yy-mm-dd', new Date(2007, 1 - 1, 26));
    

    Однако средство выбора даты форматирует только даты и не может форматировать время.

    Посмотрите jQuery UI datepicker formatDate , примеры.

        
    424
    2012-06-10 13: 51: 33Z
    1. как сказать ему использовать местное время или зулу?
      2012-03-02 16: 14: 04Z
    2. Я предпочитаю использовать это решение, чтобы получить время без какой-либо библиотеки: new Date (). toTimeString (). match (/^ ([0-9] {2 }: [0-9] {2}: [0-9] {2}) /) [0] К вашему сведению
      2012-05-31 08: 05: 50Z
    3. есть способ сделать это. $.datepicker.formatDate ('yy-mm-dd', new Date ("txtAdvDate" .Val ()) или что-то в этом роде
      2012-06-01 13: 09: 29Z
    4. @ Pomster - что заставило вас думать, что строка "txtAdvDate" будет содержать метод val? Вы имеете в виду $('# txtAdvDate'). Val ()? Предполагая, что он подходит одному из конструкторов (см. Здесь w3schools.com/jsref/jsref_obj_date.asp) тогда это будет нормально работать.
      2012-09-27 15: 46: 53Z
    5. @ Pomster - попробуйте использовать это: document.getElementById (id) .value = $.datepicker.formatDate ('yy-mm-dd', new Date ())
      2012-12-10 09: 16: 01Z
      

    Где находится документация, в которой перечислены спецификаторы формата, поддерживаемые объектом Date()?

    Я наткнулся на это сегодня и был весьма удивлен, что никто не нашел время, чтобы ответить на этот простой вопрос. Правда, есть много библиотек, которые могут помочь с манипулированием датами. Некоторые лучше, чем другие. Но это был не тот вопрос, который был задан.

    AFAIK, чистый JavaScript не поддерживает спецификаторы формата так, как вы указали, что вы хотели бы использовать их . Но он поддерживает методы форматирования дат и /или времени, такие как .toLocaleDateString(), .toLocaleTimeString() и .toUTCString().

    Ссылка на объект Date, которую я использую чаще всего, находится на веб-сайте w3schools.com (но быстрый поиск в Google покажет много других, которые могут лучше соответствовать вашим потребностям).

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

        
    218
    2013-12-04 11: 13: 23Z
    1. MDN также является отличным справочником: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
      2013-10-16 23: 25: 16Z
    2. Мой ответ также пытался ответить на этот вопрос, Я верю, что браузеры Firefox или Mozilla однажды предоставили метод Date.toString (), который принял такую ​​строку форматирования. К сожалению, я не могу найти никаких следов старой документации. Он больше не является частью стандарта и, похоже, больше нигде не поддерживается, даже в Firefox.
      2013-10-18 00: 15: 55Z

    Пользовательская функция форматирования:

    Для фиксированных форматов простая функция делает работу. В следующем примере создайте международный формат YYYY-MM-DD:

    function dateToYMD(date) {
        var d = date.getDate();
        var m = date.getMonth() + 1;
        var y = date.getFullYear();
        return '' + y + '-' + (m<=9 ? '0' + m : m) + '-' + (d <= 9 ? '0' + d : d);
    }
    

    Примечание. Однако обычно не рекомендуется расширять стандартные библиотеки Javascript (например, добавляя эту функцию к прототипу Date).

    Более продвинутая функция может генерировать настраиваемый вывод на основе параметра формата. На этой же странице есть несколько хороших примеров.

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

    Стандартные функции форматирования ECMAScript:

    Начиная с более свежих версий ECMAscript, класс Date имеет некоторые специальные функции форматирования:

      

    toDateString : зависит от реализации, показывает только дату.

         

    http: //www. ecma-international.org/ecma-262/7.0/index.html#sec-date.prototype.todatestring р>

    new Date().toDateString(); // e.g. "Fri Nov 11 2016"
    
      

    toISOString : показывать дату и время ISO 8601.

         

    http: //www. ecma-international.org/ecma-262/7.0/index.html#sec-date.prototype.toisostring р>

    new Date().toISOString(); // e.g. "2016-11-21T08:00:00.000Z"
    
      

    toJSON : Stringifier для JSON.

         

    http: //www. ecma-international.org/ecma-262/7.0/index.html#sec-date.prototype.tojson р>

    new Date().toJSON(); // e.g. "2016-11-21T08:00:00.000Z"
    
      

    toLocaleDateString : зависит от реализации, дата в формате локали.

         

    http: //www. ecma-international.org/ecma-262/7.0/index.html#sec-date.prototype.tolocaledatestring р>

    new Date().toLocaleDateString(); // e.g. "21/11/2016"
    
      

    toLocaleString : зависит от реализации, даты и времени в формате локали.

         

    http: //www. ecma-international.org/ecma-262/7.0/index.html#sec-date.prototype.tolocalestring р>

    new Date().toLocaleString(); // e.g. "21/11/2016, 08:00:00 AM"
    
      

    toLocaleTimeString : зависит от реализации, время в формате локали.

         

    http: //www. ecma-international.org/ecma-262/7.0/index.html#sec-date.prototype.tolocaletimestring р>

    new Date().toLocaleTimeString(); // e.g. "08:00:00 AM"
    
      

    toString : общий toString для даты.

         

    http: //www. ecma-international.org/ecma-262/7.0/index.html#sec-date.prototype.tostring р>

    new Date().toString(); // e.g. "Fri Nov 11 2016 08:00:00 GMT+0100 (W. Europe Standard Time)"
    

    Примечание: из этих функций форматирования можно создавать собственные выходные данные:

    new Date().toISOString().slice(0,10); // By @Image72, return YYYY-MM-DD
    
        
    211
    2017-09-29 18: 01: 53Z
    1. Должен быть принят ответ, поскольку он дает требуемый формат (01-01-2000, а не 1-1-2000)
      2013-04-12 13: 56: 59Z
    2. new Date (). toISOString (). slice (0,10) //"2015-04-27"
      2015-04-27 03: 08: 21Z
    3. Было бы очень полезно не иметь пример с 11 сентября, чтобы было ясно, в какой позиции представлены день и месяц.
      2017-08-11 08: 22: 19Z
    4. @ abimelex сделано. Надеюсь, теперь стало понятнее.
      2017-08-11 08: 37: 36Z
    5. спасибо за добавление ссылок на источник (: - см. также developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… и developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
      2019-02-25 16: 55: 57Z

    Короткий ответ

    Не существует «универсальной» документации, которая бы обслуживала javascript; каждый браузер с javascript действительно является реализацией. Тем не менее, существует стандарт, которому склонны следовать большинство современных браузеров, и это стандарт EMCAScript; Стандартные строки ECMAScript будут принимать, как минимум, модифицированную реализацию определения ISO 8601.

    В дополнение к этому есть второй стандарт, установленный IETF , к которому стремятся браузеры следовать также, который является определением для меток времени, сделанным в RFC 2822. Актуальную документацию можно найти в списке литературы внизу.

    От этого вы можете ожидать базовую функциональность, но то, что «должно быть», по сути не является тем, что «есть». Я собираюсь немного углубиться в это с процедурной точки зрения, хотя, как представляется, только три человека фактически ответили на вопрос (а именно Скотт, goofballLogic и Пеллер), который, для меня, предполагает, что большинство людей не знают, что на самом деле происходит, когда создать объект Date.

    Длинный ответ

      

    Где находится документация, в которой перечислены спецификаторы формата, поддерживаемые объектом Date ()?


    Чтобы ответить на вопрос или, как правило, даже искать ответ на этот вопрос, вам необходимо знать, что JavaScript не является новым языком; на самом деле это реализация ECMAScript и соответствует стандартам ECMAScript (но обратите внимание, что javascript также предшествовал этим стандартам; стандарты EMCAScript построены на ранней реализации LiveScript /JavaScript). Текущий стандарт ECMAScript - 5.1 (2011); в то время, когда вопрос был задан изначально (июнь 2009 г.), стандартом было 3 (4 было отменено), но 5 было выпущено вскоре после публикации в конце 2009 г. Это должно обозначить одну проблему; каким стандартам может следовать реализация javascript, может не отражать то, что на самом деле имеет место, потому что a) это реализация данного стандарта, b) не все реализации стандарта являются пуританскими, и c) функциональность не высвобождается синхронно с новый стандарт, как г) реализация - постоянная работа в процессе

    По сути, когда вы имеете дело с javascript, вы имеете дело с производной (javascript, специфичной для браузера) реализации (сам javascript). Например, в Google V8 реализован ECMAScript 5.0, но JScript Internet Explorer не пытается соответствовать какому-либо стандарту ECMAScript, однако Internet Explorer 9 действительно соответствует ECMAScript 5.0.

    Когда в функцию Date () передается один аргумент, он передает этот прототип функции:

    new Date(value)
    

    Когда два или более аргумента передаются в новый Date (), он вызывает этот прототип функции:

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


    Обе эти функции должны выглядеть знакомо, но это не сразу отвечает на ваш вопрос, и то, что количественно определяется как приемлемый «формат даты», требует дальнейшего объяснения. Когда вы передаете строку в новый Date (), он вызывает прототип (обратите внимание, что я свободно использую слово prototype ; версии могут быть отдельными функциями или частью условного выражения). оператор в одной функции) для новой даты (значения) с вашей строкой в ​​качестве аргумента для параметра «значение». Эта функция сначала проверит, является ли это число или строка. Документацию по этой функции можно найти здесь:

      

    http://www.ecma-international.org /ECMA-262/5.1 /# втор-15.9.3.2 р>

    Из этого мы можем сделать вывод, что для получения форматирования строки, разрешенного для новой даты (значения), мы должны взглянуть на метод Date.parse (строка). Документацию по этому методу можно найти здесь:

      

    http://www.ecma-international.org /ecma-262/5.1/#sec-15.9.4.2 р>

    И мы можем далее сделать вывод, что даты должны быть в измененном расширенном формате ISO 8601, как указано здесь:

      

    http://www.ecma-international.org /ecma-262/5.1/#sec-15.9.1.15 р>

    Однако из опыта мы можем понять, что объект Date в javascript принимает другие форматы (в первую очередь, обусловленные существованием этого вопроса), и это нормально, поскольку ECMAScript допускает использование форматов, специфичных для реализации. Однако это по-прежнему не дает ответа на вопрос о том, какая документация доступна в доступных форматах и ​​какие форматы фактически разрешены. Мы собираемся взглянуть на реализацию Google JavaScript, V8; пожалуйста, обратите внимание, я не утверждаю, что это «лучший» движок JavaScript (как можно определить «лучший» или даже «хороший»), и нельзя предположить, что форматы, допустимые в V8, представляют все форматы, доступные сегодня, но я думаю, что это справедливо предположить, что они соответствуют современным ожиданиям.

      

    Google V8, date.js, DateConstructor

         

    https: //code.google.com/p/v8/source/browse/trunk/src/date.js?r=18400#141 р>

    Глядя на функцию DateConstructor, мы можем сделать вывод, что нам нужно найти функцию DateParse; однако обратите внимание, что «год» - это не фактический год, а только ссылка на параметр «год».

      

    Google V8, date.js, DateParse

         

    https: //code.google.com/p/v8/source/browse/trunk/src/date.js?r=18400#270 р>

    Это вызывает% DateParseString, который на самом деле является ссылкой на функцию времени выполнения для функции C ++. Это относится к следующему коду:

      

    Google V8, runtime.cc,% DateParseString

         

    https: //code.google.com/p/v8/source/browse/trunk/src/runtime.cc?r=18400#9559 р>

    Вызов функции, который нас интересует в этой функции, предназначен для DateParser :: Parse (); игнорируйте логику, окружающую эти вызовы функций, это просто проверки на соответствие типу кодировки (ASCII и UC16). DateParser :: Parse определяется здесь:

      

    Google V8, dateparser-inl.h, DateParser :: Parse

         

    https: //code.google.com/p/v8/source/browse/trunk/src/dateparser-inl.h?r=18400#36 р>

    Это функция, которая фактически определяет, какие форматы она принимает. По сути, он проверяет наличие стандарта EMCAScript 5.0 ISO 8601 и, если он не соответствует стандартам, попытается построить дату на основе устаревших форматов. Несколько ключевых моментов, основанных на комментариях:

    1. Слова перед первым числом, которые неизвестны синтаксическому анализатору, игнорируются.
    2. Текст в скобках игнорируется.
    3. Беззнаковые числа, за которыми следует «:», интерпретируются как «компонент времени».
    4. Числа без знака, за которыми следует «.», интерпретируются как «компонент времени» и должны сопровождаться миллисекундами.
    5. Подписанные числа, за которыми следуют час или часовая минута (например, +5: 15 или +0515), интерпретируются как часовой пояс.
    6. При указании часов и минут вы можете использовать «чч: мм» или «ччмм».
    7. Слова, обозначающие часовой пояс, интерпретируются как часовой пояс.
    8. Все остальные числа интерпретируются как «компоненты даты».
    9. Все слова, которые начинаются с первых трех цифр месяца, интерпретируются как месяц.
    10. Вы можете задать минуты и часы вместе в любом из двух форматов: «чч: мм» или «ччмм».
    11. Такие символы, как «+», «-« и непревзойденный «)» не допускаются после обработки числа.
    12. Элементы, которые соответствуют нескольким форматам (например, 1970-01-01), обрабатываются как стандартная строка EMCAScript 5.0 ISO 8601.

    Так что этого должно быть достаточно, чтобы дать вам общее представление о том, чего ожидать, когда дело доходит до передачи строки в объект Date. Более подробно об этом вы можете узнать из следующей спецификации, на которую указывает Mozilla в сети разработчиков Mozilla (соответствует временным меткам IETF RFC 2822):

       http://tools.ietf.org/html/rfc2822#page-14 р>

    В Microsoft Developer Network дополнительно упоминается дополнительный стандарт для объекта Date: ECMA-402, спецификация API интернационализации ECMAScript, которая дополняет стандарт ECMAScript 5.1 (и будущие). Это можно найти здесь:

      

    http://www.ecma-international.org/ecma-402/1.0 / р>

    В любом случае это должно помочь подчеркнуть, что не существует «документации», которая универсально представляет все реализации javascript, но все еще имеется достаточно документации, чтобы разумно понять, какие строки приемлемы для объекта Date. Довольно загруженный вопрос, когда вы думаете об этом, да? : P р>

      

    Ссылки

         

    http://www.ecma-international.org /ecma-262/5.1/#sec-15.9.3.2 р>      

    http://www.ecma-international.org /ecma-262/5.1/#sec-15.9.4.2 р>      

    http://www.ecma-international.org /ecma-262/5.1/#sec-15.9.1.15 р>      

    http://tools.ietf.org/html/rfc2822#page-14 р>      

    http://www.ecma-international.org/ecma-402/1.0 / р>      

    https: //code.google.com/p/v8/source/browse/trunk/src/date.js?r=18400#141 р>      

    https: //code.google.com/p/v8/source/browse/trunk/src/date.js?r=18400#270 р>      

    https: //code.google.com/p/v8/source/browse/trunk/src/runtime.cc?r=18400#9559 р>      

    https: //code.google.com/p/v8/source/browse/trunk/src/dateparser-inl.h?r=18400#36 р>      

    Ресурсы

         

    https://developer.mozilla.org/EN-US /Docs /Web /JavaScript /Справка /Global_Objects /Дата

         

    http://msdn.microsoft.com /en-us/library/ff743760(v=vs.94).aspx р>

        
    123
    2016-10-27 11: 54: 16Z

    Обязательно извлекайте Datejs при работе с датами в JavaScript. Это довольно впечатляюще и хорошо документировано, как вы можете видеть в случае функции toString . р>

    РЕДАКТИРОВАТЬ : Тайлер Форсайт указывает, что дата устарела. Я использую его в своем текущем проекте, и у меня не было никаких проблем, однако вы должны знать об этом и рассматривать альтернативы.

        
    92
    2013-07-25 08: 29: 20Z
    1. Я не смог найти способ кормить datejs миллисекундами для создания даты. Вот так: var dateTime = new Date (); dateTime.setTime (миллисекунды);
      2011-11-30 12: 58: 45Z
    2. 25 КБ? Просто на свидания? Уч.
      2013-01-08 19: 53: 50Z
    3. Datejs - устаревшая библиотека, которая не развивалась в течение 5 лет. Их источник находится на Github и Google Code, последние даты обновлены в 2008 году (это 2013). Ради вашего здравого смысла, используйте XDate или Moment.js.
      2013-07-24 21: 51: 18Z
    4. @ TylerForsythe я добавил подсказку /предупреждение об этом.
      2013-07-25 08: 30: 11Z
    5. lol, скрипт даты устарел ...
      2013-09-06 08: 37: 22Z

    Вы можете просто развернуть объект Date с помощью нового метода format, как отмечено meizz ниже. это код, данный автором. А также вот вам jsfiddle .

    Date.prototype.format = function(format) //author: meizz
    {
      var o = {
        "M+" : this.getMonth()+1, //month
        "d+" : this.getDate(),    //day
        "h+" : this.getHours(),   //hour
        "m+" : this.getMinutes(), //minute
        "s+" : this.getSeconds(), //second
        "q+" : Math.floor((this.getMonth()+3)/3),  //quarter
        "S" : this.getMilliseconds() //millisecond
      }
    
      if(/(y+)/.test(format)) format=format.replace(RegExp.$1,
        (this.getFullYear()+"").substr(4 - RegExp.$1.length));
      for(var k in o)if(new RegExp("("+ k +")").test(format))
        format = format.replace(RegExp.$1,
          RegExp.$1.length==1 ? o[k] :
            ("00"+ o[k]).substr((""+ o[k]).length));
      return format;
    }
    
    alert(new Date().format("yyyy-MM-dd"));
    alert(new Date("january 12 2008 11:12:30").format("yyyy-MM-dd h:mm:ss"));
    
        
    69
    2013-04-18 18: 03: 45Z
    1. Немного улучшил его для поддержки AM /PM - см. ниже
      2013-07-30 15: 42: 32Z
    2. @ WHK Но мне все еще нравится моментовjj : D
      2014-06-12 14: 42: 19Z
    3. Возникли проблемы при захвате месяца: новая дата ((new Date ()). format ('yyyy-MM-dd')) return май, но теперь июнь: - /whoto использовать часовой пояс в строке разбора?
      2014-06-12 15: 08: 14Z
    4. @ WHK На самом деле это очень примитивный анализатор дат. На всякий случай, если вам не нужно слишком много связываться с датой. Если вам действительно нужно справиться с различными форматами дат, я бы порекомендовал отдельную библиотеку, такую ​​как momentjs. : D
      2014-06-12 15: 40: 14Z
    5. @ WHK Для console.log(new Date('2014-06-01')) -> May Я думаю, что это как-то связано с часовым поясом: D
      2014-06-12 15: 42: 27Z

    Функциональность, которую вы цитируете, не является стандартным Javascript и вряд ли будет переносимой во всех браузерах и, следовательно, не является хорошей практикой. В спецификации ECMAScript 3 функция анализа и вывода форматов предоставляется на реализация Javascript. ECMAScript 5 добавляет подмножество поддержки ISO8601. Я полагаю, что функция toString (), которую вы упоминаете, является новшеством в одном браузере (Mozilla?)

    Несколько библиотек предоставляют подпрограммы для параметризации, некоторые с расширенной поддержкой локализации. Вы также можете проверить методы в dojo.date.locale . р>     

    37
    2015-04-14 00: 30: 17Z
    1. Попытка ответить на вопрос на самом деле не наберет много голосов. Просто назначьте популярную библиотеку и посмотрите, как вы набираете очки!
      2014-08-26 07: 02: 21Z

    Я сделал этот очень простой форматер, он вырезан /n /pastable (обновлен с более новой версией):

    function DateFmt(fstr) {
      this.formatString = fstr
    
      var mthNames = ["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];
      var dayNames = ["Sun","Mon","Tue","Wed","Thu","Fri","Sat"];
      var zeroPad = function(number) {
         return ("0"+number).substr(-2,2);
      }
    
      var dateMarkers = {
        d:['getDate',function(v) { return zeroPad(v)}],
        m:['getMonth',function(v) { return zeroPad(v+1)}],
        n:['getMonth',function(v) { return mthNames[v]; }],
        w:['getDay',function(v) { return dayNames[v]; }],
        y:['getFullYear'],
        H:['getHours',function(v) { return zeroPad(v)}],
        M:['getMinutes',function(v) { return zeroPad(v)}],
        S:['getSeconds',function(v) { return zeroPad(v)}],
        i:['toISOString']
      };
    
      this.format = function(date) {
        var dateTxt = this.formatString.replace(/%(.)/g, function(m, p) {
          var rv = date[(dateMarkers[p])[0]]()
    
          if ( dateMarkers[p][1] != null ) rv = dateMarkers[p][1](rv)
    
          return rv
    
        });
    
        return dateTxt
      }
    
    }
    
    fmt = new DateFmt("%w %d:%n:%y - %H:%M:%S  %i")
    v = fmt.format(new Date())
    

    http://snipplr.com/view/66968.82825/

        
    30
    2013-07-23 04: 58: 52Z
    1. Мне нравится эта класс но думаю это должен быть "статический" класс. Нет необходимости создавать его более одного раза. (не нужно new DateFmt())
      2013-01-16 00: 59: 22Z
    2. Cheeso: Что делать, если я хочу отформатировать 10 разных дат на странице 3 разными способами, каждый? В этом случае было бы полезно иметь три экземпляра этого форматера. Это вполне допустимый сценарий использования, который это исключает. ОП спроектировал это правильно. Кроме того, указание формата во время построения экономит дублирование кода, так как каждый раз, когда вам нужно, он форматируется определенным образом.
      2014-06-03 20: 12: 30Z

    Фреймворк бесплатный, ограниченный, но легкий

    var d = (new Date()+'').split(' ');
    // ["Tue", "Sep", "03", "2013", "21:54:52", "GMT-0500", "(Central", "Daylight", "Time)"]
    
    [d[3], d[1], d[2], d[4]].join(' ');
    // "2013 Sep 03 21:58:03"
    
        
    29
    2013-09-04 02: 59: 06Z
    1. это кросс-браузер? и кросс локаль?
      2013-10-01 14: 58: 25Z
    2. Да. Показывает время в вашем часовом поясе (пользователь браузера).
      2013-10-01 18: 45: 19Z
    22
    2012-01-17 22: 19: 13Z
    1. Ссылки на исходный код в связанной статье мертвы, но, к счастью, кто-то поместил его на Github: github.com/rvanbaalen/date-steroids
      2014-10-30 09: 04: 14Z

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

    /**
    * Format date as a string
    * @param date - a date object (usually "new Date();")
    * @param format - a string format, eg. "DD-MM-YYYY"
    */
    function dateFormat(date, format) {
        // Calculate date parts and replace instances in format string accordingly
        format = format.replace("DD", (date.getDate() < 10 ? '0' : '') + date.getDate()); // Pad with '0' if needed
        format = format.replace("MM", (date.getMonth() < 9 ? '0' : '') + (date.getMonth() + 1)); // Months are zero-based
        format = format.replace("YYYY", date.getFullYear());
        return format;
    }
    

    Пример использования:

    console.log("The date is: " + dateFormat(new Date(), "DD/MM/YYYY"));
    
        
    17
    2012-09-28 12: 05: 13Z
    1. операции замены не очень эффективны, поэтому лучше не допускать этого.
      2012-10-09 15: 43: 11Z
    2. что если я напишу, что произойдет? console.log («Дата:» + dateFormat (new Date (), «DD /MM /YY»));
      2013-11-11 13: 49: 44Z
    3. При этом будет напечатан текст «Дата: 12/11 /YY», потому что выше не обрабатываются двухзначные даты. Если вам это нужно, вы можете добавить следующее непосредственно перед оператором возврата: format = format.replace("YY", (""+date.getFullYear()).substring(2));. Хотя это становится уродливым - вы, вероятно, захотите пойти по маршруту RegEx или подобному.
      2013-11-12 10: 12: 13Z
    4. @ mrzmyr Вы действительно думаете, что форматирование дат будет узким местом производительности? Давай.
      2013-12-27 10: 30: 35Z

    Вот функция, которую я часто использую. Результат: гггг-мм-дд чч: мм: сс.ннн.

    function date_and_time() {
        var date = new Date();
        //zero-pad a single zero if needed
        var zp = function (val){
            return (val <= 9 ? '0' + val : '' + val);
        }
    
        //zero-pad up to two zeroes if needed
        var zp2 = function(val){
            return val <= 99? (val <=9? '00' + val : '0' + val) : ('' + val ) ;
        }
    
        var d = date.getDate();
        var m = date.getMonth() + 1;
        var y = date.getFullYear();
        var h = date.getHours();
        var min = date.getMinutes();
        var s = date.getSeconds();
        var ms = date.getMilliseconds();
        return '' + y + '-' + zp(m) + '-' + zp(d) + ' ' + zp(h) + ':' + zp(min) + ':' + zp(s) + '.' + zp2(ms);
    }
    
        
    11
    2013-12-27 07: 11: 26Z
    1. хороший ответ, но я думаю, что вы должны изменить функцию zp2 следующим образом: var zp2 = function (val) {return val < = 9? '00' + val: (val < = 99? '0' + val: '' + val); }
      2013-12-23 02: 52: 49Z
    2. есть исключение, когда значение ms part равно 0, это не то же самое, в вашей функции результат равен '00', но не '000'.
      2013-12-25 14: 40: 48Z

    Может оказаться полезным это изменение объекта даты, которое меньше любой библиотеки и легко расширяется для поддержки различных форматов:

    Примечание:

    CODE

    Date.prototype.format = function(format) {
        // set default format if function argument not provided
        format = format || 'YYYY-MM-DD hh:mm';
    
        var zeropad = function(number, length) {
                number = number.toString();
                length = length || 2;
                while(number.length < length)
                    number = '0' + number;
                return number;
            },
            // here you can define your formats
            formats = {
                YYYY: this.getFullYear(),
                MM: zeropad(this.getMonth() + 1),
                DD: zeropad(this.getDate()),
                hh: zeropad(this.getHours()),
                mm: zeropad(this.getMinutes())
            },
            pattern = '(' + Object.keys(formats).join(')|(') + ')';
    
        return format.replace(new RegExp(pattern, 'g'), function(match) {
            return formats[match];
        });
    };
    

    USE

    var now = new Date;
    console.log(now.format());
    // outputs: 2015-02-09 11:47
    var yesterday = new Date('2015-02-08');
    console.log(yesterday.format('hh:mm YYYY/MM/DD'));
    // outputs: 00:00 2015/02/08
    
        
    9
    2015-02-09 10: 51: 54Z

    Просто чтобы продолжить твердый ответ gongzhitaao - это касается AM /PM

     Date.prototype.format = function (format) //author: meizz
    {
        var hours = this.getHours();
        var ttime = "AM";
        if(format.indexOf("t") > -1 && hours > 12)
        {
            hours = hours - 12;
            ttime = "PM";
         }
    
    var o = {
        "M+": this.getMonth() + 1, //month
        "d+": this.getDate(),    //day
        "h+": hours,   //hour
        "m+": this.getMinutes(), //minute
        "s+": this.getSeconds(), //second
        "q+": Math.floor((this.getMonth() + 3) / 3),  //quarter
        "S": this.getMilliseconds(), //millisecond,
        "t+": ttime
    }
    
    if (/(y+)/.test(format)) format = format.replace(RegExp.$1,
      (this.getFullYear() + "").substr(4 - RegExp.$1.length));
    for (var k in o) if (new RegExp("(" + k + ")").test(format))
        format = format.replace(RegExp.$1,
          RegExp.$1.length == 1 ? o[k] :
            ("00" + o[k]).substr(("" + o[k]).length));
    return format;
    }
    
        
    8
    2013-07-30 15: 44: 56Z
    1. Очень хорошее решение! var a = новая дата (); a.format ( 'YYYY-MM-d'); //Возврат 2013-08-16.
      2013-08-16 14: 35: 20Z
    2. this.getMonth (); не работает в iOS
      2015-04-24 10: 42: 12Z

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

    http://blarg.co.uk/blog/javascript-date-formats р>

    Мои результаты показали, что следующие форматы действительны во всех протестированных мной браузерах (в примерах используется дата "9 августа 2013"):

    [Полный год] /[Месяц] /[Номер даты] - Месяц может быть числом с или без начального нуля или названием месяца в коротком или длинном формате, а номер даты может быть с или без начального нуля.

    • 2013/08/09
    • 2013/08/9
    • 2013/8/09
    • 2013/8/9
    • 2013 /Август /09
    • 2013 /Август /9
    • 2013 /Август /09
    • 2013 /Август /9

    [Месяц] /[Полный год] /[Номер даты] - Месяц может быть числом с или без начального нуля или названием месяца в коротком или длинном формате, а номер даты может быть с или без ведущего нуля.

    • 08/2013/09
    • 08/2013/9
    • 8/2013/09
    • 8/2013/9
    • Август /2013/09
    • Август /2013/9
    • Август /2013/09
    • Август /2013/9

    Любая комбинация [Полный год], [Имя месяца] и [Номер даты], разделенных пробелами . Название месяца может быть в коротком или длинном формате, а номер даты может быть с или без ведущий ноль.

    • 2013 год, август 09
    • август 2013 09
    • 09 августа 2013 г.
    • 2013 авг. 09
    • 9 августа 2013 г.
    • 2013 9 августа
    • и т.д ...

    Также действует в "современных браузерах" (или, другими словами, во всех браузерах, кроме IE9 и ниже)

    [Полный год] - [Номер месяца] - [Номер даты] - Номер месяца и даты должен содержать начальные нули (в этом формате тип даты MySQL использует)

    • 2013-08-09

    Использование названий месяцев:
    Интересно, что при использовании названий месяцев я обнаружил, что когда-либо используются только первые 3 символа названия месяца, поэтому все перечисленное ниже является абсолютно верным:

    new Date('9 August 2013');
    new Date('9 Aug 2013');
    new Date('9 Augu 2013');
    new Date('9 Augustagfsdgsd 2013');
    
        

    7
    2014-03-27 11: 39: 32Z

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

    библиотека JDascript XDate автора Адама Шоу существует с середины 2011 года и продолжает активно развиваться. Он имеет фантастическую документацию, отличный API, форматирование, пытается оставаться обратно совместимым и даже поддерживает локализованные строки.

    Ссылка на изменение строк локали: https://gist.github.com/1221376

        
    6
    2012-10-27 23: 24: 26Z

    Пример кода:

    var d = new Date();
    var time = d.toISOString().replace(/.*?T(\d+:\d+:\d+).*/, "$1");
    

    Вывод:

      

    "13:45:20"

        
    6
    2013-11-21 13: 40: 57Z
    1. стоит отметить с toISOString (); это выводит UTC. Таким образом, если new Date();// = Fri Nov 22 2013 17:48:22 GMT+0100, выход с кодом выше будет "16:48:22"
      2013-11-22 16: 50: 06Z

    Библиотека sugar.js обладает отличным функционалом для работы с датами в JavaScript. И это очень хорошо задокументировано .

      

    Сахар очень любит класс Date, начиная с Date.create   метод, который может понять даты практически в любом формате в 15 основных   языки, включая относительные форматы, такие как «1 час назад». Даты могут   также выводится в любом формате или на языке, используя легкий для понимания   синтаксис, с ярлыками для часто используемых форматов даты. Сложная дата   Сравнение также возможно с методами, как есть, которые понимают любой   форматировать и применять встроенный в точности.

    Несколько примеров:

    Date.create('July 4, 1776')  -> July 4, 1776
    Date.create(-446806800000)   -> November 5, 1955
    Date.create(1776, 6, 4)      -> July 4, 1776
    Date.create('1776年07月04日', 'ja') -> July 4, 1776
    Date.utc.create('July 4, 1776', 'en')  -> July 4, 1776
    
    Date.create().format('{Weekday} {d} {Month}, {yyyy}')    -> Monday July 4, 2003
    Date.create().format('{hh}:{mm}')                        -> 15:57
    Date.create().format('{12hr}:{mm}{tt}')                  -> 3:57pm
    Date.create().format(Date.ISO8601_DATETIME)              -> 2011-07-05 12:24:55.528Z
    
    Date.create().is('the 7th of June') -> false
    Date.create().addMonths(2); ->"Sunday, June 15, 2014 13:39"
    
        
    6
    2014-04-15 11: 45: 20Z

    Все браузеры

    Самый надежный способ форматирования даты с использованием исходного формата, который вы используете, - это выполнить следующие шаги:

    1. Используйте new Date() для создания объекта Date
    2. Используйте .getDate(), .getMonth() и .getFullYear(), чтобы получить соответственно день, месяц и год
    3. Вставьте части вместе в соответствии с вашим целевым форматом

    Пример:

    р>

    var date = '2015-11-09T10:46:15.097Z';
    
    function format(input) {
        var date = new Date(input);
        return [
           ("0" + date.getDate()).slice(-2),
           ("0" + (date.getMonth()+1)).slice(-2),
           date.getFullYear()
        ].join('/');
    }
    
    document.body.innerHTML = format(date); // OUTPUT : 09/11/2015

    (см. также эту скрипку ).

    Только современные браузеры

    Вы также можете использовать встроенный метод .toLocaleDateString, чтобы выполнить форматирование за вас. Вам просто нужно указать правильный языковой стандарт и параметры, соответствующие правильному формату, который, к сожалению, поддерживается только современными браузерами (*) :

    р>

    var date = '2015-11-09T10:46:15.097Z';
    
    function format(input) {
        return new Date(input).toLocaleDateString('en-GB', {
            year: 'numeric',
            month: '2-digit',
            day: '2-digit'
        });
    }
    
    document.body.innerHTML = format(date); // OUTPUT : 09/11/2015

    (см. также эту скрипку ).

    (*) Согласно MDN ,« современные браузеры »означают Chrome 24+, Firefox 29+, IE11, Edge12 +, Opera 15+ и Safari ночная сборка

        
    5
    2018-04-16 08: 51: 52Z

    Просто еще один вариант, который я написал:

    Библиотека DP_DateExtensions

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

    Поддерживает форматирование даты /времени, математику даты (сложение /вычитание частей даты), сравнение даты, разбор даты и т. д. Это свободно открытый источник.

    Нет причин для этого, если вы уже используете фреймворк (они все способны), но если вам просто нужно быстро добавить манипуляции с датами в проект, дайте ему шанс.

        
    3
    2011-08-24 07: 33: 56Z
    1. 2011-05-25 11: 07: 02Z

    Правильный способ форматирования даты для возврата «2012-12-29» - использовать скрипт из Формат даты JavaScript :

    var d1 = new Date();
    return d1.format("dd-m-yy");
    

    Этот код НЕ работает:

    var d1 = new Date();
    d1.toString('yyyy-MM-dd');      
    
        
    2
    2013-02-17 18: 38: 01Z
    1. вам нужен скрипт, связанный "JavaScript Date Format", связанный выше
      2013-05-29 05: 10: 43Z

    Если вы хотите показывать только время с двумя цифрами, это может помочь вам:

    var now = new Date();
    var cHour = now.getHours();
    var cMinuts = now.getMinutes();
    var cSeconds = now.getSeconds();
    
    var outStr = (cHour <= 0 ? ('0' + cHour) : cHour) + ':' + (cMinuts <= 9 ? ('0' + cMinuts) : cMinuts) + ':' + (cSeconds <= 9 ? '0' + cSeconds : cSeconds);
    
        
    2
    2015-04-24 18: 31: 06Z

    используйте эти функции

    toTimeString() and toLocaleDateString()
    

    см. ссылку ниже для более подробной информации https://developer.mozilla.org/en-US /документы /Web /JavaScript /Справка /Global_Objects /Дата

        
    2
    2015-08-19 13: 12: 58Z

    JsSimpleDateFormat - это библиотека, которая может форматировать Date объект и анализировать отформатированную строку обратно в объект Date. Он использует формат Java (класс SimpleDateFormat). Название месяцев и дней может быть локализовано.

    Пример: р>

    var sdf = new JsSimpleDateFormat("EEEE, MMMM dd, yyyy");
    var formattedString = sdf.format(new Date());
    var dateObject = sdf.parse("Monday, June 29, 2009");
    
        
    1
    2012-06-10 13: 57: 47Z

    Ответ - «нигде», поскольку форматирование даты является частной функцией. Я не думаю, что функции toString предназначены для соответствия определенному формату. напримерв спецификации ECMAScript 5.1 ( http: //www.ecma -international.org/publications/files/ECMA-ST/Ecma-262.pdf , 02.08.2013, стр. 173), функция toString документирована следующим образом: р>

      

    «Содержимое строки зависит от реализации»

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

    function pad(toPad, padWith) {
        return (String(padWith) + String(toPad)).slice(-1 * padWith.length);
    }
    
    function dateAsInputValue(toFormat) {
        if(!(toFormat instanceof Date)) return null;
        return toFormat.getFullYear() + "-" + pad(toFormat.getMonth() + 1, "00") + "-" + pad(toFormat.getDate(), "00");
    }
    
    function timeAsInputValue(toFormat) {
        if(!(toFormat instanceof Date)) return null;        
        return pad(toFormat.getHours(), "00") + ":" + pad(toFormat.getMinutes(), "00") + ":" + pad(toFormat.getSeconds(), "00");
    }
    
        
    1
    2013-02-08 11: 51: 03Z

    Если вам не нужны все функции, которые предоставляет такая библиотека, как Moment.js , вы можете использовать мой порт strftime . Он легкий (1,35 КБ против 57,9 КБ, уменьшенный по сравнению с Moment.js 2.15.0) и обеспечивает большую часть функциональности strftime().

    /* Port of strftime(). Compatibility notes:
     *
     * %c - formatted string is slightly different
     * %D - not implemented (use "%m/%d/%y" or "%d/%m/%y")
     * %e - space is not added
     * %E - not implemented
     * %h - not implemented (use "%b")
     * %k - space is not added
     * %n - not implemented (use "\n")
     * %O - not implemented
     * %r - not implemented (use "%I:%M:%S %p")
     * %R - not implemented (use "%H:%M")
     * %t - not implemented (use "\t")
     * %T - not implemented (use "%H:%M:%S")
     * %U - not implemented
     * %W - not implemented
     * %+ - not implemented
     * %% - not implemented (use "%")
     *
     * strftime() reference:
     * http://man7.org/linux/man-pages/man3/strftime.3.html
     *
     * Day of year (%j) code based on Joe Orost's answer:
     * http://stackoverflow.com/questions/8619879/javascript-calculate-the-day-of-the-year-1-366
     *
     * Week number (%V) code based on Taco van den Broek's prototype:
     * http://techblog.procurios.nl/k/news/view/33796/14863/calculate-iso-8601-week-and-year-in-javascript.html
     */
    function strftime(sFormat, date) {
      if (!(date instanceof Date)) date = new Date();
      var nDay = date.getDay(),
        nDate = date.getDate(),
        nMonth = date.getMonth(),
        nYear = date.getFullYear(),
        nHour = date.getHours(),
        aDays = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],
        aMonths = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],
        aDayCount = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334],
        isLeapYear = function() {
          if (nYear&3!==0) return false;
          return nYear%100!==0 || year%400===0;
        },
        getThursday = function() {
          var target = new Date(date);
          target.setDate(nDate - ((nDay+6)%7) + 3);
          return target;
        },
        zeroPad = function(nNum, nPad) {
          return ('' + (Math.pow(10, nPad) + nNum)).slice(1);
        };
      return sFormat.replace(/%[a-z]/gi, function(sMatch) {
        return {
          '%a': aDays[nDay].slice(0,3),
          '%A': aDays[nDay],
          '%b': aMonths[nMonth].slice(0,3),
          '%B': aMonths[nMonth],
          '%c': date.toUTCString(),
          '%C': Math.floor(nYear/100),
          '%d': zeroPad(nDate, 2),
          '%e': nDate,
          '%F': date.toISOString().slice(0,10),
          '%G': getThursday().getFullYear(),
          '%g': ('' + getThursday().getFullYear()).slice(2),
          '%H': zeroPad(nHour, 2),
          '%I': zeroPad((nHour+11)%12 + 1, 2),
          '%j': zeroPad(aDayCount[nMonth] + nDate + ((nMonth>1 && isLeapYear()) ? 1 : 0), 3),
          '%k': '' + nHour,
          '%l': (nHour+11)%12 + 1,
          '%m': zeroPad(nMonth + 1, 2),
          '%M': zeroPad(date.getMinutes(), 2),
          '%p': (nHour<12) ? 'AM' : 'PM',
          '%P': (nHour<12) ? 'am' : 'pm',
          '%s': Math.round(date.getTime()/1000),
          '%S': zeroPad(date.getSeconds(), 2),
          '%u': nDay || 7,
          '%V': (function() {
                  var target = getThursday(),
                    n1stThu = target.valueOf();
                  target.setMonth(0, 1);
                  var nJan1 = target.getDay();
                  if (nJan1!==4) target.setMonth(0, 1 + ((4-nJan1)+7)%7);
                  return zeroPad(1 + Math.ceil((n1stThu-target)/604800000), 2);
                })(),
          '%w': '' + nDay,
          '%x': date.toLocaleDateString(),
          '%X': date.toLocaleTimeString(),
          '%y': ('' + nYear).slice(2),
          '%Y': nYear,
          '%z': date.toTimeString().replace(/.+GMT([+-]\d+).+/, '$1'),
          '%Z': date.toTimeString().replace(/.+\((.+?)\)$/, '$1')
        }[sMatch] || sMatch;
      });
    }
    

    Пример использования:

    strftime('%F'); // Returns "2016-09-15"
    strftime('%A, %B %e, %Y'); // Returns "Thursday, September 15, 2016"
    
    // You can optionally pass it a Date object...
    
    strftime('%x %X', new Date('1/1/2016')); // Returns "1/1/2016 12:00:00 AM"
    

    Последний код доступен здесь: https://github.com/thdoan/strftime р>     

    1
    2016-09-15 09: 05: 22Z

    Лично, поскольку я использую как PHP, так и jQuery /javascript в равных пропорциях, я использую функцию даты из php.js http://phpjs.org/functions/date/ р>

    Использовать библиотеку, которая использует те же строки формата, что и я, я уже знаю, проще для меня, и руководство, содержащее все возможности форматирования строк для функции даты, конечно же, онлайн на php.net

    Вы просто включаете файл date.js в свой HTML-код, используя предпочитаемый метод, затем вызываете его так:

    var d1=new Date();
    var datestring = date('Y-m-d', d1.valueOf()/1000);
    

    Вы можете использовать d1.getTime () вместо valueOf (), если хотите, они делают то же самое.

    Деление на 1000 метки времени javascript связано с тем, что метка времени javascript указывается в миллисекундах, а метка времени PHP - в секундах.

        
    0
    2013-04-03 11: 11: 27Z

    Многие фреймворки (которые вы, возможно, уже используете) имеют форматирование даты, о котором вы можете не знать. jQueryUI уже упоминался, но другие фреймворки, такие как пользовательский интерфейс Kendo (глобализация) , пользовательский интерфейс Yahoo (Util) и AngularJS также их есть.

    // 11/6/2000
    kendo.toString(new Date(value), "d")
    
    // Monday, November 06, 2000
    kendo.toString(new Date(2000, 10, 6), "D")
    
        
    0
    2013-05-17 16: 04: 18Z
источник размещен Вот