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

2101
leora 24 Авг 2010 в 03:28

29 ответов

Лучший ответ

Для пользовательских форматов даты с разделителями необходимо извлечь компоненты даты (или времени) из DateTimeFormat объект (который является частью API интернационализации ECMAScript), а затем вручную создайте строку с необходимыми разделителями.

Для этого вы можете использовать {{X0} } :

const d = new Date('2010-08-05')
const dtf = new Intl.DateTimeFormat('en', { year: 'numeric', month: 'short', day: '2-digit' }) 
const [{ value: mo },,{ value: da },,{ value: ye }] = dtf.formatToParts(d) 

console.log(`${da}-${mo}-${ye}`)
console.log(`${da}👠${mo}👢${ye}`) // just for fun

Вы также можете извлекать части DateTimeFormat по одному, используя DateTimeFormat#format, но обратите внимание, что при использовании этого метода по состоянию на март 2020 года существует ошибка в реализации ECMAScript, когда речь идет о ведущих нулях по минутам и секундам (эта ошибка обойдена описанным выше подходом) ,

const d = new Date('2010-08-05')
const ye = new Intl.DateTimeFormat('en', { year: 'numeric' }).format(d)
const mo = new Intl.DateTimeFormat('en', { month: 'short' }).format(d)
const da = new Intl.DateTimeFormat('en', { day: '2-digit' }).format(d)

console.log(`${da}-${mo}-${ye}`)

При работе с датами и временем обычно стоит использовать библиотеку (например, moment.js, luxon) из-за множества скрытых сложностей поля.

Обратите внимание, что API интернационализации ECMAScript, используемый в приведенных выше решениях, не поддерживается в IE10 (0,03% доля мирового рынка браузеров в феврале 2020 года).

1192
52d6c6af 5 Мар 2020 в 14:42

Вам следует взглянуть на DayJs это ремейк момента, но модульная архитектура ориентированы так легче.

Быстрая 2 КБ альтернатива Moment.js с тем же современным API

Day.js - это минималистичная библиотека JavaScript, которая анализирует, проверяет, манипулирует и отображает даты и время для современных браузеров с API, в значительной степени совместимым с Moment.js. Если вы используете Moment.js, вы уже знаете, как использовать Day.js.

var date = Date.now();
const formatedDate = dayjs(date).format("YYYY-MM-DD")
console.log(formatedDate);
<script src="https://cdnjs.cloudflare.com/ajax/libs/dayjs/1.8.16/dayjs.min.js" crossorigin="anonymous"></script>
8
Melchia 26 Янв 2020 в 11:08

Чтобы получить «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 .

7
Peter Mortensen 23 Мар 2019 в 11:53

Любой, кто ищет действительно простое решение 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
8
Hinrich 26 Ноя 2018 в 09:08

Начиная с 2019 года, похоже, что вы можете получить toLocaleDateString для возврата только определенных частей, а затем присоединиться к ним по своему усмотрению:

var date = new Date();

console.log(date.toLocaleDateString("en-US", { day: 'numeric' }) 
            + "-"+ date.toLocaleDateString("en-US", { month: 'short' })
            + "-" + date.toLocaleDateString("en-US", { year: 'numeric' }) );

> 16-Nov-2019

console.log(date.toLocaleDateString("en-US", { month: 'long' }) 
            + " " + date.toLocaleDateString("en-US", { day: 'numeric' }) 
            + ", " + date.toLocaleDateString("en-US", { year: 'numeric' }) );

> November 16, 2019
8
K Vij 17 Ноя 2019 в 03:52

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

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

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

Date.create().format('{12hr}:{mm}{tt}')
8
Peter Mortensen 18 Май 2015 в 15:56
var today = new Date();
var formattedToday = today.toLocaleDateString() + ' ' + today.toLocaleTimeString();
9
Jeffrey Knight 18 Янв 2017 в 20:22

Вот как я реализовал для моих плагинов 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 23 Фев 2017 в 06:17

Это может помочь с проблемой:

var d = new Date();

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

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

Date to locate format

14
Peter Mortensen 23 Мар 2019 в 11:48

Полезный и гибкий способ форматирования 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"

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

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

Синтаксис

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

Параметры

< Сильный > локали

Необязательный. Строка с языковым тегом 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.

< Сильный > TIMEZONE

Часовой пояс для использования. Единственные значения, которые должны распознавать реализации, это "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".

второй

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

< Сильный > TimeZoneName

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

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

Подробнее

15
Iman Bahrampour 1 Ноя 2017 в 19:15

У нас есть много решений для этого, но я думаю, что лучшим из них является 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>
15
Peter Mortensen 4 Мар 2017 в 22:33

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

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

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

15
Carrie Kendall 20 Окт 2015 в 16:08
new Date().toLocaleDateString()

// "3/21/2018"

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

16
Kirk Strobeck 21 Мар 2018 в 17:23

Решение 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)
17
Peter Mortensen 23 Мар 2019 в 11:44

Вот код, который я только что написал для обработки форматирования даты для проекта, над которым я работаю. Он имитирует функциональность форматирования даты в 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
 * 
 ************************************/
19
jmiraglia 8 Май 2013 в 18:15

Пакетное решение: Luxon

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

Luxon размещен на веб-сайте Moment.js и разработан разработчиком Moment.js, поскольку Moment.js имеет ограничения, которые разработчик хотел бы устранить, но не смог.

Установить:

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

Примере:

luxon.DateTime.fromISO('2010-08-10').toFormat('yyyy-LLL-dd');

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

10 августа 2010 г.

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

Используя форматирование, аналогичное Moment.js, Class DateTimeFormatter ( Java) и класс 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)
    ;
    // checks to see if month name will be used
    patternStr = 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('EEEE', EEEE).replace('EEE', EEE)
      .replace('yyyy', yyyy)
      .replace('yy', yy)
      .replace('aaa', aaa);
    if (patternStr.indexOf('MMM') > -1) {
        patternStr = patternStr
          .replace('MMMM', MMMM)
          .replace('MMM', MMM);
    }
    else {
        patternStr = patternStr
          .replace('MM', MM)
          .replace('M', M);
    }
    return patternStr;
}
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'));

Спасибо @Gerry за то, что поднял вопрос о Luxon.

25
lewdev 6 Авг 2019 в 01:22

Использование строкового шаблона 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);
30
vdegenne 7 Май 2018 в 13:31

Я могу получить ваш запрошенный формат в одну строку без использования библиотек и методов 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()')

В моем тестировании это надежно работает в основных браузерах (Chrome, Safari, Firefox и IE). Как указывало @RobG, выходные данные Date.prototype.toString () зависят от реализации, поэтому просто проверьте выходные данные, чтобы убедиться, что это работает прямо в вашем движке JavaScript. Вы даже можете добавить некоторый код, чтобы проверить вывод строки и убедиться, что он соответствует ожидаемому, прежде чем выполнять регулярное выражение.

35
JD Smith 14 Янв 2020 в 18:05

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

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

var date = '10/8/2010';

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

date = new Date(date);

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

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"

Для получения дополнительной информации см. Intl API и Intl.DateTimeFormat документация.

36
robsiemb 10 Ноя 2019 в 00:46

@ 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 / документы / Web / JavaScript / Справка / Global_Objects / Дата / toLocaleDateString

36
user956584 2 Окт 2014 в 16:40

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

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

Начало работы: http://www.datejs.com/2007 / 11/27 / получение стартер - с - datejs /

51
Peter Mortensen 18 Май 2015 в 15:53

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

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

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

'24-Jan-2016'

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

95
John Slegers 8 Июн 2017 в 14:55

Простой 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
104
Peter Mortensen 4 Мар 2017 в 22:17

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

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

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

Ссылки:

133
Slava Fomin II 15 Окт 2015 в 08:51

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

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

// formatted will be 'Jul 8, 2014'

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

175
Dmitry Pavlov 21 Авг 2014 в 20:44

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

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

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

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

http: //www.ecma-international .org / ECMA - 262 / 7.0 / index.html # втор- 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 # втор- 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 # втор- 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));
219
Adrian Maire 30 Ноя 2017 в 20:22

Ну, я хотел преобразовать сегодняшнюю дату в 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);
}

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

406
simo 21 Май 2019 в 07:51

Если вам нужно быстро отформатировать дату, используя простой 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
500
lorem monkey 11 Авг 2015 в 16:25

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

601
Stephan Muller 14 Дек 2015 в 15:38