Где можно найти документацию по форматированию даты в JavaScript?

Я заметил, что функция 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() ?

вопрос задан 29.06.2009
Naga Kiran
4939 репутация

35 ответов


  • 1017 рейтинг

    Мне нравится 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); 

    ответ дан Haim Evgi, с репутацией 88212, 29.06.2009
  • 671 рейтинг

    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.3KB minified + gzipped в наименьшей возможной настройке (feb 2014)

    ответ дан chx007, с репутацией 7129, 12.04.2012
  • 419 рейтинг

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

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

    Тем не менее, datepicker только форматирует даты и не может форматировать время.

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

    ответ дан casid, с репутацией 4263, 11.08.2011
  • 216 рейтинг

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

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

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

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

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

    ответ дан Scott Offen, с репутацией 4258, 3.08.2012
  • 201 рейтинг

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

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

     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 : Generic 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
     
    ответ дан Adrian Maire, с репутацией 6524, 21.05.2012
  • 121 рейтинг

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

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

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

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


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

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


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

    По сути, при работе с 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 (), она вызывается прототипом (обратите внимание, что я использую прототип слова свободно, версии могут быть отдельными функциями или могут быть частью условного оператора в одной функции) для новую дату (значение) с вашей строкой в ​​качестве аргумента для параметра «значение». Эта функция сначала проверит, является ли это числом или строкой. Документацию по этой функции можно найти здесь:

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

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

    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 допускает конкретные форматы реализации. Тем не менее, это все еще не отвечает на вопрос о том, какая документация доступна в доступных форматах, и какие форматы фактически разрешены. Мы рассмотрим реализацию javascript Google, 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. При объявлении часа и минуты вы можете использовать либо «hh: mm», либо «hhmm».
    7. Слова, обозначающие часовой пояс, интерпретируются как часовой пояс.
    8. Все остальные номера интерпретируются как «компоненты даты».
    9. Все слова, начинающиеся с первых трех цифр месяца, интерпретируются как месяц.
    10. Вы можете определить минуты и часы вместе в любом из двух форматов: «hh: mm» или «hhmm».
    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. Довольно загруженный вопрос, когда вы думаете об этом, да? :П

    Рекомендации

    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/Reference/Global_Objects/Date

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

    ответ дан Sg'te'gmuj, с репутацией 141, 23.12.2013
  • 92 рейтинг

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

    EDIT : Тайлер Форсайт указывает, что datejs устарел. Я использую его в своем текущем проекте и не испытываю никаких проблем с ним, однако вы должны знать об этом и рассматривать альтернативы.

    ответ дан Tim Büthe, с репутацией 46200, 2.07.2009
  • 67 рейтинг

    Вы можете просто расширить объект 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"));
     
    ответ дан gongzhitaao, с репутацией 4579, 19.11.2012
  • 34 рейтинг

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

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

    ответ дан peller, с репутацией 4345, 7.09.2009
  • 30 рейтинг

    Я сделал этот очень простой форматировщик, он обрезается / 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/

    ответ дан Lyndon S, с репутацией 428, 31.08.2012
  • 28 рейтинг

    Рамка свободная, ограниченная, но светлая

     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"
     
    ответ дан John Williams, с репутацией 4590, 4.09.2013
  • 22 рейтинг

    DateJS, безусловно, полнофункциональный, но я бы порекомендовал этот MUCH simpler lib (формат даты JavaScript), который я предпочитаю просто потому, что это всего лишь 120 строк или около того.

    ответ дан Eric Wendelin, с репутацией 28945, 17.01.2012
  • 17 рейтинг

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

     /**
    * 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"));
     
    ответ дан Ollie Bennett, с репутацией 2687, 28.09.2012
  • 11 рейтинг

    Вот функция, которую я использую много. Результат - yyyy-mm-dd hh: mm: ss.nnn.

     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);
    }
     
    ответ дан Carl, с репутацией 29600, 22.12.2013
  • 9 рейтинг

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

    ЗАМЕТКА:

    • Он использует Object.keys (), который не определен в старых браузерах, поэтому вам может потребоваться реализовать polyfill из данной ссылки.

    КОД

     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];
        });
    };
     

    ИСПОЛЬЗОВАНИЕ

     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
     
    ответ дан Vaclav, с репутацией 2422, 9.02.2015
  • 8 рейтинг

    Просто, чтобы продолжить твердый ответ 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;
    }
     
    ответ дан Michael Angstadt, с репутацией 653, 30.07.2013
  • 7 рейтинг

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

    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');
     
    ответ дан Pete Newnham, с репутацией 191, 27.03.2014
  • 6 рейтинг

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

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

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

     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"
     
    ответ дан andersh, с репутацией 4503, 9.08.2013
  • 6 рейтинг

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

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

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

    ответ дан Sam Lown, с репутацией 94, 17.02.2012
  • 6 рейтинг

    Пример кода:

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

    Вывод:

    "13:45:20"

    ответ дан Nery Jr, с репутацией 2614, 21.11.2013
  • 3 рейтинг

    Все браузеры

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

    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 ночной сборки

    ответ дан John Slegers, с репутацией 26343, 16.04.2018
  • 3 рейтинг

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

    Библиотека DP_DateExtensions

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

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

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

    ответ дан Jim Davis, с репутацией 1180, 14.08.2009
  • 2 рейтинг

    использовать эти функции

     toTimeString() and toLocaleDateString()
     

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

    ответ дан nidhin, с репутацией 169, 19.08.2015
  • 2 рейтинг

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

     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);
     
    ответ дан Usman Younas, с репутацией 749, 20.05.2013
  • 2 рейтинг

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

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

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

     var d1 = new Date();
    d1.toString('yyyy-MM-dd');      
     
    ответ дан Sebastian Viereck, с репутацией 2218, 8.01.2013
  • 1 рейтинг

    JsSimpleDateFormat - это библиотека, которая может форматировать объект даты и анализировать форматированную строку обратно на объект 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");
     
    ответ дан Peter, с репутацией 19, 20.05.2012
  • 1 рейтинг

    Если вам не нужны все функции, которые предоставляет библиотека, например, 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

    ответ дан thdoan, с репутацией 7599, 15.09.2016
  • 0 рейтинг

    Лично, потому что я использую как PHP, так и jQuery / javascript в равных измерениях, я использую функцию date из 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 - в секундах.

    ответ дан Cloudranger, с репутацией 639, 3.04.2013
  • 0 рейтинг

    Конкретный ответ на этот вопрос содержится в следующих двух строках:

     //pull the last two digits of the year
    console.log(new Date().getFullYear().toString().substr(2,2)); 

    Форматирование даты полного времени (MMddyy): jsFiddle

    JavaScript:

         //A function for formatting a date to MMddyy
    function formatDate(d)
    {
        //get the month
        var month = d.getMonth();
        //get the day
        var day = d.getDate();
        //get the year
        var year = d.getFullYear();
        
        //pull the last two digits of the year
        year = year.toString().substr(2,2);
        
        //increment month by 1 since it is 0 indexed
        month = month + 1;
        //converts month to a string
        month = month + "";
    
        //if month is 1-9 pad right with a 0 for two digits
        if (month.length == 1)
        {
            month = "0" + month;
        }
    
        //convert day to string
        day = day + "";
    
        //if day is between 1-9 pad right with a 0 for two digits
        if (day.length == 1)
        {
            day = "0" + day;
        }
    
        //return the string "MMddyy"
        return month + day + year;
    }
    
    var d = new Date();
    console.log(formatDate(d)); 

    ответ дан abc123, с репутацией 12634, 3.02.2017
  • 0 рейтинг

    d = Date.now();
    d = new Date(d);
    d = (d.getMonth()+1)+'/'+d.getDate()+'/'+d.getFullYear()+' '+(d.getHours() > 12 ? d.getHours() - 12 : d.getHours())+':'+d.getMinutes()+' '+(d.getHours() >= 12 ? "PM" : "AM");
    
    console.log(d);

    ответ дан Cris, с репутацией 1377, 23.10.2017
  • 0 рейтинг

    Ответ «нигде», поскольку форматирование даты - это собственная функциональность. Я не думаю, что функции toString предназначены для соответствия определенному формату. например, в спецификации ECMAScript 5.1 ( http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf , 2/8/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");
    }
     
    ответ дан goofballLogic, с репутацией 16474, 8.02.2013
  • 0 рейтинг

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

     // 11/6/2000
    kendo.toString(new Date(value), "d")
    
    // Monday, November 06, 2000
    kendo.toString(new Date(2000, 10, 6), "D")
     
    ответ дан ProVega, с репутацией 4817, 17.05.2013
  • 0 рейтинг

    См. DtmFRM.js . Если вы знакомы с пользовательской строкой даты и времени C #, эта библиотека должна делать то же самое.

    ДЕМО :

     var format = new dtmFRM();
    var now = new Date().getTime();
    
    $('#s2').append(format.ToString(now,"This month is : MMMM") + "</br>");
    $('#s2').append(format.ToString(now,"Year is  : y or yyyy or yy") + "</br>");
    $('#s2').append(format.ToString(now,"mm/yyyy/dd") + "</br>");
    $('#s2').append(format.ToString(now,"dddd, MM yyyy ") + "</br>");
    $('#s2').append(format.ToString(now,"Time is : hh:mm:ss ampm") + "</br>");
    $('#s2').append(format.ToString(now,"HH:mm") + "</br>");
    $('#s2').append(format.ToString(now,"[ddd,MMM,d,dddd]") + "</br></br>");
    
    now = '11/11/2011 10:15:12' ;
    
    $('#s2').append(format.ToString(now,"MM/dd/yyyy hh:mm:ss ampm") + "</br></br>");
    
    now = '40/23/2012'
    $('#s2').append(format.ToString(now,"Year is  : y or yyyy or yy") + "</br></br>");
     
    ответ дан Mina Gabriel, с репутацией 9234, 21.01.2014
  • -1 рейтинг

    Мы можем сделать это вручную, это довольно просто и просто.

     var today = new Date();
    	   
    	   alert("today :"+today);
    	   
    	   var dd = today.getDate();
    	   alert("dd :"+dd);
    	   
    	   var mm = today.getMonth()+1; //January is 0!
    	   alert("mm :"+mm);
    	   
    	   var yyyy = today.getFullYear();
    	   
    	   alert("yyyy :"+yyyy);
    	   
    	   
    	   var hh = today.getHours();
    	   
    	   alert("hh :"+hh);
    	   
    	   var min = today.getMinutes();
    	   
    	 	alert("min :"+min);
    	 	
    	 	var ss = today.getSeconds();
    	 	
    	 	alert("ss :"+ss);
    
    	   if(dd<10) {
    	       dd='0'+dd
    	   } 
    
    	   if(mm<10) {
    	       mm='0'+mm
    	   } 
    
    	 //  today = mm+'/'+dd+'/'+yyyy;
        // if you want / instead - then add /
    	 
    	 
    	 today = yyyy + "-" + mm + "-" + dd + " " + hh + ":" + mm + ":" + ss;
         today = yyyy + "/" + mm + "/" + dd + " " + hh + ":" + mm + ":" + ss;
         // use according to your choice  

    ответ дан Varun, с репутацией 2559, 12.02.2016
  • -1 рейтинг

    Хотя JavaScript дает вам много отличных способов форматирования и вычислений, я предпочитаю использовать библиотеку Moment.js (momentjs.com) во время разработки приложения, поскольку он очень интуитивно понятен и экономит много времени.

    Тем не менее, я предлагаю всем узнать об основном JavaScript API для лучшего понимания.

    ответ дан Gaurav Karwal, с репутацией 101, 30.10.2013