it-roy-ru.com

Как отформатировать дату в JavaScript

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

1546
leora

Внимание: ниже приведены лучшие ответы. Этот ответ был написан в 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, чтобы использовать январь, февраль, мар и т.д.

968
Marko

Используйте toLocaleDateString()

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

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

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

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

Примечание. Если вы хотите только настроить параметры содержимого, но при этом использовать текущую локаль, передача 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

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

1346
ajeet kanojia

Используйте библиотеку 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/

549
RobertPitt

Если вам нужно быстро отформатировать дату, используя простой 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
391
sebastian.i

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

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

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

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

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

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

325
simo

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

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

// formatted will be 'Jul 8, 2014'

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

164
Dmitry Pavlov

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

Для фиксированных форматов, простая функция сделать работу. В следующем примере генерируется международный формат 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));

157
Adrian Maire

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

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

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

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

117
Sébastien

Простой 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
96
Mite Mitreski

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

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 nightly построить .

86
John Slegers

Вы должны взглянуть на date.js . Он добавляет множество удобных помощников для работы с датами, например, в вашем случае:

var date = Date.parse('2010-08-10');
console.log(date.toString('dd-MMM-yyyy'));

Начало работы: http://www.datejs.com/2007/11/27/getting-started-with-datejs/

49
NiKo

Я могу получить ваш запрошенный формат в одну строку без использования библиотек и методов Date, просто regex: 

var d = (new Date()).toString().replace(/\S+\s(\S+)\s(\d+)\s(\d+)\s.*/,'$2-$1-$3');
// date will be formatted as "14-Oct-2015" (pass any date object in place of 'new Date()')

Обновление: как указывало @RobG, вывод Date.prototype.toString () зависит от реализации. Поэтому используйте с осторожностью и при необходимости измените ваши реализации, если вы используете это решение. В моем тестировании это надежно работает в Северной Америке, где основные браузеры (Chrome, Safari, Firefox и IE) возвращают одинаковый формат строки.

33
JD Smith

@ Sébastien - альтернатива всем браузерам

new Date(parseInt(496407600)*1000).toLocaleDateString('de-DE', {
year: 'numeric',
month: '2-digit',
day: '2-digit'
}).replace(/\./g, '/');

Документация: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleDateString

32
user956584

Использование строкового шаблона ECMAScript Edition 6 (ES6/ES2015):

let d = new Date();
let formatted = `${d.getFullYear()}-${d.getMonth() + 1}-${d.getDate()}`;

Если вам нужно изменить разделители:

const delimiter = '/';
let formatted = [d.getFullYear(), d.getMonth() + 1, d.getDate()].join(delimiter);
26
vdegenne

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

var d = new Date(); 
d_string = d.format("m/d/Y h:i:s");

/**************************************
 * Date class extension
 * 
 */
    // Provide month names
    Date.prototype.getMonthName = function(){
        var month_names = [
                            'January',
                            'February',
                            'March',
                            'April',
                            'May',
                            'June',
                            'July',
                            'August',
                            'September',
                            'October',
                            'November',
                            'December'
                        ];

        return month_names[this.getMonth()];
    }

    // Provide month abbreviation
    Date.prototype.getMonthAbbr = function(){
        var month_abbrs = [
                            'Jan',
                            'Feb',
                            'Mar',
                            'Apr',
                            'May',
                            'Jun',
                            'Jul',
                            'Aug',
                            'Sep',
                            'Oct',
                            'Nov',
                            'Dec'
                        ];

        return month_abbrs[this.getMonth()];
    }

    // Provide full day of week name
    Date.prototype.getDayFull = function(){
        var days_full = [
                            'Sunday',
                            'Monday',
                            'Tuesday',
                            'Wednesday',
                            'Thursday',
                            'Friday',
                            'Saturday'
                        ];
        return days_full[this.getDay()];
    };

    // Provide full day of week name
    Date.prototype.getDayAbbr = function(){
        var days_abbr = [
                            'Sun',
                            'Mon',
                            'Tue',
                            'Wed',
                            'Thur',
                            'Fri',
                            'Sat'
                        ];
        return days_abbr[this.getDay()];
    };

    // Provide the day of year 1-365
    Date.prototype.getDayOfYear = function() {
        var onejan = new Date(this.getFullYear(),0,1);
        return Math.ceil((this - onejan) / 86400000);
    };

    // Provide the day suffix (st,nd,rd,th)
    Date.prototype.getDaySuffix = function() {
        var d = this.getDate();
        var sfx = ["th","st","nd","rd"];
        var val = d%100;

        return (sfx[(val-20)%10] || sfx[val] || sfx[0]);
    };

    // Provide Week of Year
    Date.prototype.getWeekOfYear = function() {
        var onejan = new Date(this.getFullYear(),0,1);
        return Math.ceil((((this - onejan) / 86400000) + onejan.getDay()+1)/7);
    } 

    // Provide if it is a leap year or not
    Date.prototype.isLeapYear = function(){
        var yr = this.getFullYear();

        if ((parseInt(yr)%4) == 0){
            if (parseInt(yr)%100 == 0){
                if (parseInt(yr)%400 != 0){
                    return false;
                }
                if (parseInt(yr)%400 == 0){
                    return true;
                }
            }
            if (parseInt(yr)%100 != 0){
                return true;
            }
        }
        if ((parseInt(yr)%4) != 0){
            return false;
        } 
    };

    // Provide Number of Days in a given month
    Date.prototype.getMonthDayCount = function() {
        var month_day_counts = [
                                    31,
                                    this.isLeapYear() ? 29 : 28,
                                    31,
                                    30,
                                    31,
                                    30,
                                    31,
                                    31,
                                    30,
                                    31,
                                    30,
                                    31
                                ];

        return month_day_counts[this.getMonth()];
    } 

    // format provided date into this.format format
    Date.prototype.format = function(dateFormat){
        // break apart format string into array of characters
        dateFormat = dateFormat.split("");

        var date = this.getDate(),
            month = this.getMonth(),
            hours = this.getHours(),
            minutes = this.getMinutes(),
            seconds = this.getSeconds();
        // get all date properties ( based on PHP date object functionality )
        var date_props = {
            d: date < 10 ? '0'+date : date,
            D: this.getDayAbbr(),
            j: this.getDate(),
            l: this.getDayFull(),
            S: this.getDaySuffix(),
            w: this.getDay(),
            z: this.getDayOfYear(),
            W: this.getWeekOfYear(),
            F: this.getMonthName(),
            m: month < 10 ? '0'+(month+1) : month+1,
            M: this.getMonthAbbr(),
            n: month+1,
            t: this.getMonthDayCount(),
            L: this.isLeapYear() ? '1' : '0',
            Y: this.getFullYear(),
            y: this.getFullYear()+''.substring(2,4),
            a: hours > 12 ? 'pm' : 'am',
            A: hours > 12 ? 'PM' : 'AM',
            g: hours % 12 > 0 ? hours % 12 : 12,
            G: hours > 0 ? hours : "12",
            h: hours % 12 > 0 ? hours % 12 : 12,
            H: hours,
            i: minutes < 10 ? '0' + minutes : minutes,
            s: seconds < 10 ? '0' + seconds : seconds           
        };

        // loop through format array of characters and add matching data else add the format character (:,/, etc.)
        var date_string = "";
        for(var i=0;i<dateFormat.length;i++){
            var f = dateFormat[i];
            if(f.match(/[a-zA-Z]/g)){
                date_string += date_props[f] ? date_props[f] : '';
            } else {
                date_string += f;
            }
        }

        return date_string;
    };
/*
 *
 * END - Date class extension
 * 
 ************************************/
17
jmiraglia

Если вы используете в своем коде пользовательский интерфейс jQuery, существует встроенная функция formatDate(). Я использую его для форматирования сегодняшней даты:

var testdate = Date();
testdate = $.datepicker.formatDate( "d-M-yy",new Date(testdate));
alert(testdate);

Вы можете увидеть много других примеров форматирования даты в документации по jQuery UI .

15
webzy

У нас есть много решений для этого, но я думаю, что лучшим из них является Moment.js. Поэтому я лично предлагаю использовать Moment.js для операций с датой и временем.

console.log(moment().format('DD-MMM-YYYY'));
<script src="//cdnjs.cloudflare.com/ajax/libs/moment.js/2.14.1/moment.min.js"></script>

14
Vijay Maheriya

Упакованное решение:moment.js

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

Установить:

npm install moment или yarn add moment (посетите ссылку для других методов установки)

Пример:

moment("2010-08-10").format("DD-MMM-YYYY")

Урожайность:

10-августа-2010

Ручное решение

Используя форматирование, аналогичное Moment.js, Class DateTimeFormatter (Java) и Class SimpleDateFormat (Java) , я реализовал комплексное решение formatDate(date, patternStr), в котором код легко читать и изменять. Вы можете отобразить дату, время, AM/PM и т.д. См. Код для большего количества примеров.

Пример:

formatDate(new Date(), 'EEEE, MMMM d, yyyy HH:mm:ss:S')

(formatDate реализован в фрагменте кода ниже)

Урожайность:

Пятница, 12 октября 2018 года 18: 11: 23: 445

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

Шаблоны даты и времени

yy = двухзначный год; yyyy = полный год

M = цифра месяц; MM = двухзначный месяц; MMM = короткое название месяца; MMMM = полное название месяца

EEEE = полное название дня недели; EEE = короткое название дня недели

d = день цифры; dd = двухзначный день

h = часы утра/вечера; hh = двухзначное число часов утра/вечера; H = часы; HH = двухзначные часы

m = минуты; mm = минуты с двумя цифрами; aaa = AM/PM

s = секунды; ss = 2-значные секунды

S = миллисекунды

var monthNames = [
  "January", "February", "March", "April", "May", "June", "July",
  "August", "September", "October", "November", "December"
];
var dayOfWeekNames = [
  "Sunday", "Monday", "Tuesday",
  "Wednesday", "Thursday", "Friday", "Saturday"
];
function formatDate(date, patternStr){
    if (!patternStr) {
        patternStr = 'M/d/yyyy';
    }
    var day = date.getDate(),
        month = date.getMonth(),
        year = date.getFullYear(),
        hour = date.getHours(),
        minute = date.getMinutes(),
        second = date.getSeconds(),
        miliseconds = date.getMilliseconds(),
        h = hour % 12,
        hh = twoDigitPad(h),
        HH = twoDigitPad(hour),
        mm = twoDigitPad(minute),
        ss = twoDigitPad(second),
        aaa = hour < 12 ? 'AM' : 'PM',
        EEEE = dayOfWeekNames[date.getDay()],
        EEE = EEEE.substr(0, 3),
        dd = twoDigitPad(day),
        M = month + 1,
        MM = twoDigitPad(M),
        MMMM = monthNames[month],
        MMM = MMMM.substr(0, 3),
        yyyy = year + "",
        yy = yyyy.substr(2, 2)
    ;
    return patternStr
      .replace('hh', hh).replace('h', h)
      .replace('HH', HH).replace('H', hour)
      .replace('mm', mm).replace('m', minute)
      .replace('ss', ss).replace('s', second)
      .replace('S', miliseconds)
      .replace('dd', dd).replace('d', day)
      .replace('MMMM', MMMM).replace('MMM', MMM).replace('MM', MM).replace('M', M)
      .replace('EEEE', EEEE).replace('EEE', EEE)
      .replace('yyyy', yyyy)
      .replace('yy', yy)
      .replace('aaa', aaa)
    ;
}
function twoDigitPad(num) {
    return num < 10 ? "0" + num : num;
}
console.log(formatDate(new Date()));
console.log(formatDate(new Date(), 'dd-MMM-yyyy')); //OP's request
console.log(formatDate(new Date(), 'EEEE, MMMM d, yyyy HH:mm:ss.S aaa'));
console.log(formatDate(new Date(), 'EEE, MMM d, yyyy HH:mm'));
console.log(formatDate(new Date(), 'yyyy-MM-dd HH:mm:ss.S'));
console.log(formatDate(new Date(), 'M/dd/yyyy h:mmaaa'));

14
lewdev

new Date().toLocaleDateString()

// "3/21/2018"

Дополнительная документация на developer.mozilla.org

13
Kirk Strobeck

Решение JavaScript без использования каких-либо внешних библиотек:

var now = new Date()
months = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec']
var formattedDate = now.getDate()+"-"+months[now.getMonth()]+"-"+now.getFullYear()
alert(formattedDate)
13
Prasad DLV

Вот как я реализовал для моих плагинов npm

var monthNames = [
  "January", "February", "March",
  "April", "May", "June", "July",
  "August", "September", "October",
  "November", "December"
];

var Days = [
  "Sunday", "Monday", "Tuesday", "Wednesday",
  "Thursday", "Friday", "Saturday"
];

var formatDate = function(dt,format){
  format = format.replace('ss', pad(dt.getSeconds(),2));
  format = format.replace('s', dt.getSeconds());
  format = format.replace('dd', pad(dt.getDate(),2));
  format = format.replace('d', dt.getDate());
  format = format.replace('mm', pad(dt.getMinutes(),2));
  format = format.replace('m', dt.getMinutes());
  format = format.replace('MMMM', monthNames[dt.getMonth()]);
  format = format.replace('MMM', monthNames[dt.getMonth()].substring(0,3));
  format = format.replace('MM', pad(dt.getMonth()+1,2));
  format = format.replace(/M(?![ao])/, dt.getMonth()+1);
  format = format.replace('DD', Days[dt.getDay()]);
  format = format.replace(/D(?!e)/, Days[dt.getDay()].substring(0,3));
  format = format.replace('yyyy', dt.getFullYear());
  format = format.replace('YYYY', dt.getFullYear());
  format = format.replace('yy', (dt.getFullYear()+"").substring(2));
  format = format.replace('YY', (dt.getFullYear()+"").substring(2));
  format = format.replace('HH', pad(dt.getHours(),2));
  format = format.replace('H', dt.getHours());
  return format;
}

pad = function(n, width, z) {
  z = z || '0';
  n = n + '';
  return n.length >= width ? n : new Array(width - n.length + 1).join(z) + n;
}
13
Amit Kumar Gupta

Полезный и гибкий способ форматирования DateTimes в JavaScript - это Intl.DateTimeFormat:

var date = new Date();
var options = { year: 'numeric', month: 'short', day: '2-digit'};
var _resultDate = new Intl.DateTimeFormat('en-GB', options).format(date);
// The _resultDate is: "12 Oct 2017"
// Replace all spaces with - and then log it.
console.log(_resultDate.replace(/ /g,'-'));

Результат: "12-Oct-2017"

Форматы даты и времени можно настроить с помощью аргумента параметров.

Объект Intl.DateTimeFormat - это конструктор для объектов, которые включают форматирование даты и времени с учетом языка.

Синтаксис

new Intl.DateTimeFormat([locales[, options]])
Intl.DateTimeFormat.call(this[, locales[, options]])

Параметры

locales

Необязательный. Строка с языковым тегом BCP 47 или массив таких строк. Для общей формы и интерпретации аргумента locales см. Страницу Intl. Разрешены следующие ключи расширения Unicode:

nu
Numbering system. Possible values include: "arab", "arabext", "bali", "beng", "deva", "fullwide", "gujr", "guru", "hanidec", "khmr", "knda", "laoo", "latn", "limb", "mlym", "mong", "mymr", "orya", "tamldec", "telu", "thai", "tibt".
ca
Calendar. Possible values include: "buddhist", "chinese", "coptic", "ethioaa", "ethiopic", "gregory", "hebrew", "indian", "islamic", "islamicc", "iso8601", "japanese", "persian", "roc".

Опции

Необязательный. Объект с некоторыми или всеми из следующих свойств:

localeMatcher

Алгоритм сопоставления локали для использования. Возможные значения: "lookup" и "best fit"; по умолчанию "best fit". Информацию об этой опции смотрите на странице Intl.

часовой пояс

Часовой пояс для использования. Единственные значения, которые должны распознавать реализации, это "UTC"; по умолчанию используется часовой пояс по умолчанию. Реализации также могут распознавать имена часовых поясов базы данных часовых поясов IANA, такие как "Asia/Shanghai", "Asia/Kolkata", "America/New_York".

hour12

Использовать ли 12-часовое время (в отличие от 24-часового). Возможные значения: true и false; значение по умолчанию зависит от локали.

formatMatcher

Алгоритм соответствия формата для использования. Возможные значения: "basic" и "best fit"; по умолчанию "best fit". См. Следующие параграфы для получения информации об использовании этого свойства.

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

weekday, year, month, day, hour, minute, second
weekday, year, month, day
year, month, day
year, month
month, day
hour, minute, second
hour, minute

Реализации могут поддерживать другие подмножества, и запросы будут согласовываться со всеми доступными комбинациями подмножеств-представлений, чтобы найти наилучшее соответствие. Для этого согласования доступны два алгоритма, которые выбираются свойством formatMatcher: полностью определенный алгоритм "basic" и зависящий от реализации алгоритм «наилучшего соответствия».

день недели

Представление дня недели. Возможные значения: "narrow", "short", "long".

эпоха

Представление эпохи. Возможные значения: "narrow", "short", "long".

год

Представление года. Возможные значения: "numeric", "2-digit".

месяц

Представление месяца. Возможные значения: "numeric", "2-digit", "narrow", "short", "long".

день

Представление дня. Возможные значения: "numeric", "2-digit".

час

Представление часа. Возможные значения: "numeric", "2-digit".

минута

Представление о минуте. Возможные значения: "numeric", "2-digit".

second

Представление второе. Возможные значения: "numeric", "2-digit".

timeZoneName

Представление названия часового пояса. Возможные значения: "short", "long". Значение по умолчанию для каждого свойства компонента даты и времени не определено, но если все свойства компонента не определены, то предполагается, что год, месяц и день равны "numeric".

Проверить онлайн

Подробнее

11
Iman Bahrampour

OK, у нас есть нечто, называемое Intl, которое очень полезно для форматирования даты в JavaScript в наши дни:

Ваша дата как ниже:

var date = '10/8/2010';

И вы меняете на Date, используя new Date (), как показано ниже:

date = new Date(date);

И теперь вы можете отформатировать его так, как вам нравится, используя список locales, как показано ниже:

date = new Intl.DateTimeFormat('en-AU').format(date); // Australian date format: "8/10/2010" 


date = new Intl.DateTimeFormat('en-US').format(date); // USA date format: "10/8/2010" 


date = new Intl.DateTimeFormat('ar-EG').format(date);  // Arabic date format: "٨‏/١٠‏/٢٠١٠"

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

date = new Date(Date.UTC(2010, 7, 10, 0, 0, 0));
var options = {year: "numeric", month: "short", day: "numeric"};
date = new Intl.DateTimeFormat("en-AU", options).format(date).replace(/\s/g, '-');

И результат будет:

"10-Aug-2010"

Для получения более подробной информации о ECMAScript API Интернационализация (Intl), посетите здесь .

11
Alireza
var today = new Date();
var formattedToday = today.toLocaleDateString() + ' ' + today.toLocaleTimeString();
8
zest

Привет, проверьте, поможет ли это с вашей проблемой.

var d = new Date();

var options = {   
    day: 'numeric',
    month: 'long', 
    year: 'numeric'
};

console.log(d.toLocaleDateString('en-ZA', options));

 Date to locate format

7
Mr Nsubuga

Любой, кто ищет действительно простое решение ES6 для копирования, вставки и использования:

const dateToString = d => `${d.getFullYear()}-${('00' + (d.getMonth() + 1)).slice(-2)}-${('00' + d.getDate()).slice(-2)}` 

// how to use:
const myDate = new Date(Date.parse('04 Dec 1995 00:12:00 GMT'))
console.log(dateToString(myDate)) // 1995-12-04

7
Hinrich

Sugar.js имеет отличные расширения объекта Date, включая метод Date.format .

Примеры из документации:

Date.create().format('{Weekday} {Month} {dd}, {yyyy}');

Date.create().format('{12hr}:{mm}{tt}')
7
hasen

Попробуй это:

function init(){
    var d = new Date();
    var day = d.getDate();
    var x = d.toDateString().substr(4, 3);
    var year = d.getFullYear();
    document.querySelector("#mydate").innerHTML = day + '-' + x + '-' + year;
}
window.onload = init;
<div id="mydate"></div>

4
Arjun Nayak

DateFormatter.formatDate(new Date(2010,7,10), 'DD-MMM-YYYY')

=> 10-Aug-2010

DateFormatter.formatDate(new Date(), 'YYYY-MM-DD HH:mm:ss')

=> 2017-11-22 19:52:37

DateFormatter.formatDate(new Date(2005, 1, 2, 3, 4, 5), 'D DD DDD DDDD, M MM MMM MMMM, YY YYYY, h hh H HH, m mm, s ss, a A')

=> 2 02 Wed Wednesday, 2 02 Feb February, 05 2005, 3 03 3 03, 4 04, 5 05, am AM

var DateFormatter = {
  monthNames: [
    "January", "February", "March", "April", "May", "June",
    "July", "August", "September", "October", "November", "December"
  ],
  dayNames: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
  formatDate: function (date, format) {
    var self = this;
    format = self.getProperDigits(format, /d+/gi, date.getDate());
    format = self.getProperDigits(format, /M+/g, date.getMonth() + 1);
    format = format.replace(/y+/gi, function (y) {
      var len = y.length;
      var year = date.getFullYear();
      if (len == 2)
        return (year + "").slice(-2);
      else if (len == 4)
        return year;
      return y;
    })
    format = self.getProperDigits(format, /H+/g, date.getHours());
    format = self.getProperDigits(format, /h+/g, self.getHours12(date.getHours()));
    format = self.getProperDigits(format, /m+/g, date.getMinutes());
    format = self.getProperDigits(format, /s+/gi, date.getSeconds());
    format = format.replace(/a/ig, function (a) {
      var amPm = self.getAmPm(date.getHours())
      if (a === 'A')
        return amPm.toUpperCase();
      return amPm;
    })
    format = self.getFullOr3Letters(format, /d+/gi, self.dayNames, date.getDay())
    format = self.getFullOr3Letters(format, /M+/g, self.monthNames, date.getMonth())
    return format;
  },
  getProperDigits: function (format, regex, value) {
    return format.replace(regex, function (m) {
      var length = m.length;
      if (length == 1)
        return value;
      else if (length == 2)
        return ('0' + value).slice(-2);
      return m;
    })
  },
  getHours12: function (hours) {
    // https://stackoverflow.com/questions/10556879/changing-the-1-24-hour-to-1-12-hour-for-the-gethours-method
    return (hours + 24) % 12 || 12;
  },
  getAmPm: function (hours) {
    // https://stackoverflow.com/questions/8888491/how-do-you-display-javascript-datetime-in-12-hour-am-pm-format
    return hours >= 12 ? 'pm' : 'am';
  },
  getFullOr3Letters: function (format, regex, nameArray, value) {
    return format.replace(regex, function (s) {
      var len = s.length;
      if (len == 3)
        return nameArray[value].substr(0, 3);
      else if (len == 4)
        return nameArray[value];
      return s;
    })
  }
}

console.log(DateFormatter.formatDate(new Date(), 'YYYY-MM-DD HH:mm:ss'));
console.log(DateFormatter.formatDate(new Date(), 'D DD DDD DDDD, M MM MMM MMMM, YY YYYY, h hh H HH, m mm, s ss, a A'));
console.log(DateFormatter.formatDate(new Date(2005, 1, 2, 3, 4, 5), 'D DD DDD DDDD, M MM MMM MMMM, YY YYYY, h hh H HH, m mm, s ss, a A'));

Описание формата было принято Ionic Framework (не поддерживает Z, UTC Timezone Offset)

Не тщательно проверен

3
amit77309

Существует новая библиотека, smarti.to.js , для локализованного форматирования чисел JavaScript, дат и дат JSON (Microsoft или ISO8601).

Пример:

new Date('2015-1-1').to('dd.MM.yy')         // Outputs 01.01.2015
"2015-01-01T10:11:12.123Z".to('dd.MM.yy')   // Outputs 01.01.2015

Есть также пользовательские короткие шаблоны, определенные в файле локализации (smarti.to. {Culture} .js). Пример (smarti.to.et-EE.js):

new Date('2015-1-1').to('d')                // Outputs 1.01.2015

И мультиформатная способность:

smarti.format('{0:n2} + {1:n2} = {2:n2}', 1, 2, 3)   // Output: 1,00 + 2,00 = 3,00
3
Gene R

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

var D = Date().toString().split(" ");
document.getElementById("demo").innerHTML = D[2] + "-" + D[1] + "-" + D[3];
3
Dave

Если вам нравится короткая, удобочитаемая функция - ее легко настроить в соответствии с вашими потребностями.

Параметр timeStamp равен 1970 миллисекундам - ​​он возвращается функцией new Date().getTime() и многими другими устройствами ...

ОК, я передумал. Я включил дополнительную функцию для заполнения нулями. Проклятия!

 function zeroPad(aNumber) {
     return ("0"+aNumber).slice(-2);
 }
 function humanTime(timeStamp) {
    var M = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
    var D = new Date(timeStamp); // 23 Aug 2016 16:45:59 <-- Desired format.
    return D.getDate() + " " + M[D.getMonth()] + " " + D.getFullYear() + " " + D.getHours() + ":" + zeroPad(d.getMinutes()) + ":" + zeroPad(D.getSeconds());
 }
3
Dave

Добавьте плагин jQuery UI на свою страницу:

function DateFormate(dateFormate, datetime) {
    return $.datepicker.formatDate(dateFormate, datetime);
};
3
Thulasiram

Я использую следующее. Это просто и отлично работает.

 var dtFormat = require('dtformat');
   var today = new Date();
   dtFormat(today, "dddd, mmmm dS, yyyy, h:MM:ss TT");

Или это:

var now = new Date()
months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
var formattedDate = now.getDate()  + "-" + months[now.getMonth()] + "-" + now.getFullYear()
alert(formattedDate)
2
SaidB

Вот скрипт, который делает именно то, что вы хотите

https://github.com/UziTech/js-date-format

var d = new Date("2010-8-10");
document.write(d.format("DD-MMM-YYYY"));
2
Tony Brix

Другой способ, чем вы можете отформатировать дату

function formatDate(dDate,sMode){   
    var today = dDate;
    var dd = today.getDate();
    var mm = today.getMonth()+1; //January is 0!
    var yyyy = today.getFullYear();
    if(dd<10) {
        dd = '0'+dd
    } 
    if(mm<10) {
        mm = '0'+mm
    } 
    if (sMode+""==""){
        sMode = "dd/mm/yyyy";
    }
    if (sMode == "yyyy-mm-dd"){
        return  yyyy + "-" + mm + "-" + dd + "";
    }
    if (sMode == "dd/mm/yyyy"){
        return  dd + "/" + mm + "/" + yyyy;
    }
}
2
Matias Osmerini

Если вы уже используете ExtJS в своем проекте, вы можете использовать Ext.Date

var date = new Date();
Ext.Date.format(date, "d-M-Y");

возвращает:

"11-Nov-2015"
2
Peter

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

function formatDate(date) {
    var monthNames = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
    var day = date.getDate(), monthIndex = date.getMonth(), year = date.getFullYear().toString().substr(-2);
    return day + ' ' + monthNames[monthIndex] + ' ' + year;
}
    
document.write(formatDate(new Date())); 

2
Basj

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

yourDateObject производит:

Ср. 13 дек. 2017 20:40:40 GMT + 0200 (EET)

yourDateObject.toString().slice(0, 15); производит:

Ср 13 дек 2017

1
Combine

Следующий код позволит вам отформатировать дату в DD-MM-YYYY (27-12-2017) или DD MMM YYYY (27 декабря 2017 г.):

/** Pad number to fit into nearest power of 10 */
function padNumber(number, prependChar, count) {
  var out = '' + number; var i;
  if (number < Math.pow(10, count))
    while (out.length < ('' + Math.pow(10, count)).length) out = prependChar + out;

  return out;
}

/* Format the date to 'DD-MM-YYYY' or 'DD MMM YYYY' */
function dateToDMY(date, useNumbersOnly) {
  var months = [
    'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 
    'Nov', 'Dec'
  ];

  return '' + padNumber(date.getDate(), '0', 1) + 
   (useNumbersOnly? '-' + padNumber(date.getMonth() + 1, '0', 1) + '-' : ' ' + months[date.getMonth()] + ' ')
    + date.getFullYear();
}

Измените порядок date.getFullYear() и padNumber(date.getDate(), '0', 1), чтобы сделать функцию dateToYMD().

Смотрите repl.it пример для деталей.

1
Agi Hammerthief

Краткий, широко совместимый подход:

function formatDate(date) {
    date.toISOString()
    .replace(/^(\d+)-(\d+)-(\d+).*$/, // Only extract Y-M-D
        function (a,y,m,d) {
            return [
                d, // Day
                ['Jan','Feb','Mar','Apr','May','Jun',  // Month Names
                'Jul','Ago','Sep','Oct','Nov','Dec']
                [m-1], // Month
                y  // Year
            ].join('-') // Stitch together
        })
}

Или одной строкой:

date.toISOString().replace(/^(\d+)-(\d+)-(\d+)T(\d+):(\d+):(\d+).(\d+)Z$/, function (a,y,m,d) {return [d,['Jan','Feb','Mar','Apr','May','Jun','Jul','Ago','Sep','Oct','Nov','Dic'][m-1],y].join('-')})
1
JP de la Torre

2.39KB минимизировано. Один файл. https://github.com/rhroyston/clock-js

10 августа 2010 года будет:

var str = clock.month
str.charAt(0).toUpperCase() + str.slice(1,3); //gets you "Aug"
console.log(clock.day + '-' + str + '-' + clock.year); //gets you 10-Aug-2010



1
Ron Royston

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

В качестве второго параметра он принимает отметку времени, которая может поступать откуда угодно, например, Date.getTime ().

Кроме того, Locutus поддерживает больший модуль datetime, также внутри пакета locutus, который даст более объектно-ориентированный способ его использования.

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

Вы можете найти документацию по параметрам и форматным строкам здесь (обратите внимание, что сайт doc является сайтом php, но реализация locutus следует точно таким же спецификациям)

Примеры дата Модуль

date('H:m:s \\m \\i\\s \\m\\o\\n\\t\\h', 1062402400)//'07:09:40 m is month'

date('F j, Y, g:i a', 1062462400)//'September 2, 2003, 12:26 am'

date('Y W o', 1062462400)//'2003 36 2003'

var $x = date('Y m d', (new Date()).getTime() / 1000) $x = $x + '' var $result = $x.length // 2009 01 09    10

date('W', 1104534000)   //'52'

date('B t', 1104534000) //'999 31'

date('W U', 1293750000.82); // 2010-12-31   '52 1293750000'

date('W', 1293836400); // 2011-01-01    '52'

date('W Y-m-d', 1293974054); // 2011-01-02  '52 2011-01-02'
0
Guilherme Ferreira

Чтобы получить «10 августа 2010», попробуйте:

var date = new Date('2010-08-10 00:00:00');
date = date.toLocaleDateString(undefined, {day:'2-digit'}) + '-' + date.toLocaleDateString(undefined, {month:'short'}) + '-' + date.toLocaleDateString(undefined, {year:'numeric'})

Для поддержки браузера см. toLocaleDateString .

0
site

Простая функция, которая может вернуть дату, дату + время или просто время:

var myDate =  dateFormatter( "2019-01-24 11:33:24", "date-time" ); 
// >> RETURNS "January 24, 2019 11:33:24"

var myDate2 = dateFormatter( "2019-01-24 11:33:24", "date" );  
// >> RETURNS "January 24, 2019"

var myDate3 = dateFormatter( "2019-01-24 11:33:24", "time" ); 
// >> RETURNS "11:33:24"


function dateFormatter( strDate, format ){
    var theDate = new Date(strDate);
    if( format=="time" )
       return getTimeFromDate(theDate);
    else{
       var dateOptions = {year:'numeric', month:'long', day:'numeric'};
       var formattedDate = theDate.toLocaleDateString("en-US", + dateOptions);
       if( format=="date" )
           return formattedDate;
       return formattedDate + " " + getTimeFromDate(theDate);
    }
}

function getTimeFromDate( theDate ){
    var sec = theDate.getSeconds();
    if( sec<10 )
        sec = "0"+sec;
    var min = theDate.getMinutes();
    if( min<10 )
        min = "0"+min;
    return theDate.getHours() + ':'+ min + ':' + sec;
}

0
blairzotron

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

http://www.javascriptsource.com/repository/javascripts/2009/03/880961/JS_Simple_Date_Format.Zip

Пример:

var sdf = new JsSimpleDateFormat("dd-MMM-yyyy");
var formattedString = sdf.format(new Date());
var dateObject = sdf.parse("10-Aug-2010");
0
John

Вам не нужны никакие библиотеки, просто извлеките компоненты даты и создайте строку. Вот как получить формат YYYY-MM-DD, также обратите внимание на индекс месяца «январь равен 0, февраль равен 1 и т.д.».

// @flow

type Components = {
  day: number,
  month: number,
  year: number
}

export default class DateFormatter {
  // YYYY-MM-DD
  static YYYY_MM_DD = (date: Date): string => {
    const components = DateFormatter.format(DateFormatter.components(date))
    return `${components.year}-${components.month}-${components.day}`
  }

  static format = (components: Components) => {
    return {
      day: `${components.day}`.padStart(2, '0'),
      month: `${components.month}`.padStart(2, '0'),
      year: components.year
    }
  }

  static components = (date: Date) => {
    return {
      day: date.getDate(),
      month: date.getMonth() + 1,
      year: date.getFullYear()
    }
  }
}
0
onmyway133

Использование:

thisDate = new Date(parseInt(jsonDateString.replace('/Date(', '')));
formattedDate = (thisDate.getMonth() + 1) + "/" + (thisDate.getDate()+1) + "/" + thisDate.getFullYear();

Это берет JSON date, "/ Date (1429573751663) /" и производит как отформатированную строку:

"4/21/2015"

0
pat capozzi