Как отформатировать дату в JavaScript - PullRequest
1732 голосов
/ 24 августа 2010

Как мне отформатировать объект даты JavaScript для печати как 10-Aug-2010?

Ответы [ 49 ]

1545 голосов
/ 01 декабря 2015

Использование toLocaleDateString()

Метод toLocaleDateString() возвращает строку с чувствительным к языку представлением части даты в дате.Аргументы locales и options позволяют приложениям указывать язык, для которого должны использоваться соглашения о форматировании, и позволяют настраивать поведение функции.

Значения, которые вы можете передавать в опциях для разных ключей:

  1. день: Представление дня.Возможные значения: «числовой», «2-значный».
  2. день недели: Представление дня недели.Возможные значения: «узкий», «короткий», «длинный».
  3. год: Представление года.Возможные значения: «числовой», «2-значный».
  4. month: Представление месяца.Возможные значения: «числовой», «2-значный», «узкий», «короткий», «длинный».
  5. час: Представление часа.Возможные значения: «числовой», «2-значный».
  6. минута: Представление минуты.Возможные значения: «числовой», «2-значный».
  7. секунда: Представление второе.Возможные значения: «числовые», двузначные ».

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

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

Для разных языков:

  1. "en-US": Для английского языка
  2. "hi-IN": ДляХинди
  3. "ja-JP": Для японского

Вы можете использовать дополнительные языковые опции.

Например

var options = { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' };
var today  = new Date();

console.log(today.toLocaleDateString("en-US")); // 9/17/2016
console.log(today.toLocaleDateString("en-US", options)); // Saturday, September 17, 2016
console.log(today.toLocaleDateString("hi-IN", options)); // शनिवार, 17 सितंबर 2016

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

// Example
9/17/2016, 1:21:34 PM

Ссылки:

1047 голосов
/ 24 августа 2010

Внимание: ниже приведены лучшие ответы. Этот ответ был написан в 2010 году, и с тех пор появились новые и лучшие решения. ОП должен принять другой ответ.

function formatDate(date) {
  var monthNames = [
    "January", "February", "March",
    "April", "May", "June", "July",
    "August", "September", "October",
    "November", "December"
  ];

  var day = date.getDate();
  var monthIndex = date.getMonth();
  var year = date.getFullYear();

  return day + ' ' + monthNames[monthIndex] + ' ' + year;
}

console.log(formatDate(new Date()));  // show current date-time in console

Вы можете редактировать массив monthNames для использования в январе, феврале, марте и т.

569 голосов
/ 24 августа 2010

Используйте библиотеку date.format :

var dateFormat = require('dateformat');
var now = new Date();
dateFormat(now, "dddd, mmmm dS, yyyy, h:MM:ss TT");

возвращается:

Saturday, June 9th, 2007, 5:46:21 PM 

формат даты в нпм

http://jsfiddle.net/phZr7/1/

426 голосов
/ 16 мая 2015

Если вам нужно быстро отформатировать дату с использованием простого JavaScript, используйте getDate, getMonth + 1, getFullYear, getHours и getMinutes:

var d = new Date();

var datestring = d.getDate()  + "-" + (d.getMonth()+1) + "-" + d.getFullYear() + " " +
d.getHours() + ":" + d.getMinutes();

// 16-5-2015 9:50

Или, если вам нужнодополняется нулями:

var datestring = ("0" + d.getDate()).slice(-2) + "-" + ("0"+(d.getMonth()+1)).slice(-2) + "-" +
    d.getFullYear() + " " + ("0" + d.getHours()).slice(-2) + ":" + ("0" + d.getMinutes()).slice(-2);

// 16-05-2015 09:50
355 голосов
/ 23 июня 2012

Ну, я хотел преобразовать сегодняшнюю дату в MySQL строку даты, такую ​​как 2012-06-23, и использовать эту строку в качестве параметра в одном из моих запросов.Я нашел простое решение:

var today = new Date().toISOString().slice(0, 10);

Имейте в виду, что приведенное выше решение не учитывает смещение вашего часового пояса.

Вы можете рассмотретьвместо этого используйте эту функцию:

function toJSONLocal (date) {
    var local = new Date(date);
    local.setMinutes(date.getMinutes() - date.getTimezoneOffset());
    return local.toJSON().slice(0, 10);
}

Это даст вам правильную дату в случае, если вы выполняете этот код в начале / конце дня.

177 голосов
/ 12 апреля 2017

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

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

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

console.log(dateToYMD(new Date(2017,10,5))); // Nov 5

Формат OP может быть сгенерирован как:

function dateToYMD(date) {
    var strArray=['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
    var d = date.getDate();
    var m = strArray[date.getMonth()];
    var y = date.getFullYear();
    return '' + (d <= 9 ? '0' + d : d) + '-' + m + '-' + y;
}
console.log(dateToYMD(new Date(2017,10,5))); // Nov 5

Примечание. Однако обычно не стоит расширять стандартные библиотеки 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 21 2016 08:00:00 GMT+0100 (W. Europe Standard Time)"

Примечание: из этого форматирования можно создать пользовательский вывод>

new Date().toISOString().slice(0,10); //return YYYY-MM-DD

Примеры фрагментов:

console.log("1) "+  new Date().toDateString());
console.log("2) "+  new Date().toISOString());
console.log("3) "+  new Date().toJSON());
console.log("4) "+  new Date().toLocaleDateString());
console.log("5) "+  new Date().toLocaleString());
console.log("6) "+  new Date().toLocaleTimeString());
console.log("7) "+  new Date().toString());
console.log("8) "+  new Date().toISOString().slice(0,10));
168 голосов
/ 09 июля 2014

Если вы уже используете jQuery UI в своем проекте, вы можете сделать это следующим образом:

var formatted = $.datepicker.formatDate("M d, yy", new Date("2014-07-08T09:02:21.377"));

// formatted will be 'Jul 8, 2014'

Некоторые опции формата даты для выбора даты доступны для воспроизведения здесь .

125 голосов
/ 30 декабря 2011

Я думаю, вы можете просто использовать нестандартный метод Дата toLocaleFormat(formatString)

formatString: Строка формата в том же формате, который ожидается strftime() функция в C.

var today = new Date();
today.toLocaleFormat('%d-%b-%Y'); // 30-Dec-2011

Ссылки:

99 голосов
/ 24 декабря 2014

Простой JavaScript - лучший выбор для маленьких лет.

С другой стороны, если вам нужно больше информации о дате, MomentJS - отличное решение.

Например:

moment().format('YYYY-MM-DD HH:m:s');     // now() -> 2015-03-24 14:32:20
moment("20111031", "YYYYMMDD").fromNow(); // 3 years ago
moment("20120620", "YYYYMMDD").fromNow(); // 3 years ago
moment().startOf('day').fromNow();        // 11 hours ago
moment().endOf('day').fromNow();          // in 13 hours
91 голосов
/ 25 января 2016

В современных браузерах (*) вы можете просто сделать это:

var today = new Date().toLocaleDateString('en-GB', {
    day : 'numeric',
    month : 'short',
    year : 'numeric'
}).split(' ').join('-');

Вывод, если выполнен сегодня (24 января 2016 г.):

'24-Jan-2016'

(*) Согласно MDN , «современные браузеры» означают Chrome 24+, Firefox 29+, Internet Explorer 11, Edge 12+, Opera 15+ & Safari ночная сборка .

...