Где я могу найти документацию по форматированию даты в 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")

Я не мог найти документацию нигде, показывающую все допустимые форматы строк при вызове

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

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


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

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

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

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


где находится документация, в которой перечислены спецификаторы формата, поддерживаемые


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

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

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

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

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

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

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


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

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


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

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

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

new Date(value)

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

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


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

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

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

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

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

Google V8, дата.Яш, DateConstructor

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

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

Google V8, дата.js, DateParse

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

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

V8 Google, 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 дополнительно упоминает дополнительный стандарт для объекта 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/Reference/Global_Objects/Date

http://msdn.microsoft.com/en-us/library/ff743760 (v=против 94).aspx


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

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


вы можете просто расширить 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.,
    (this.getFullYear()+"").substr(4 - RegExp..length));
  for(var k in o)if(new RegExp("("+ k +")").test(format))
    format = format.replace(RegExp.,
      RegExp..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"));

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

несколько библиотек предоставляют подпрограммы для параметризации этого, некоторые с обширная поддержка локализации. Вы также можете проверить методы в додзе.дата.локаль.


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


рамки свободные, ограниченные, но Света

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"

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


/**
* 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"));

вот функция, которую я использую много. В результате гггг-ММ-ДД чч:мм:СС.ННН.

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

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

Примечание:

  • он использует

просто чтобы продолжить твердый ответ 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.,
  (this.getFullYear() + "").substr(4 - RegExp..length));
for (var k in o) if (new RegExp("(" + k + ")").test(format))
    format = format.replace(RegExp.,
      RegExp..length == 1 ? o[k] :
        ("00" + o[k]).substr(("" + o[k]).length));
return format;
}

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

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

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

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

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

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

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

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

  • 2013 09 августа
  • август 2013 09
  • 09 августа 2013
  • 2013 авг 09
  • 9 августа 2013
  • 2013 9
  • etc...

также действует в "современных браузерах" (или, другими словами, во всех браузерах, кроме 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');

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

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

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


пример кода:

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

выход:

"13:45:20"


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

сахар дает классу даты много любви, начиная с даты.создавать метод, который может понимать даты практически в любом формате в 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"

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

Библиотека DP_DateExtensions

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

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

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


все браузеры

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

  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 сборка


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

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

этот код не работает:

var d1 = new Date();
d1.toString('yyyy-MM-dd');      

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

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

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

toTimeString() and toLocaleDateString()

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


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");

Если вам не нужны все функции, что библиотека, как момент.js предоставляет, то вы можете использовать мой порт функцию strftime. Он легкий (1.35 KB против 57.9 KB уменьшен по сравнению с моментом.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+).+/, ''),
      '%Z': date.toTimeString().replace(/.+\((.+?)\)$/, '')
    }[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


ответ "нигде", так как форматирование даты является собственностью функциональности. Я не думаю, что функции toString предназначены для соответствия определенному формату. например, в спецификации ECMAScript 5.1 (http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf, 28.02.2013, стр. 173), the 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");
}

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

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

вы просто укажите дату.JS-файл в вашем HTML, используя ваш предпочтительный метод тогда назовите это так:

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

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

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


многие фреймворки (которые вы, возможно, уже используете) имеют форматирование даты, о котором вы, возможно, не знаете. jQueryUI уже упоминался, но другие рамки, такие как Kendo UI (глобализация), 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")