Преобразование строки в дату в JavaScript

669

Как я могу преобразовать строку в дату в JavaScript?

var st = "date in some format"
var dt = new date();

var dt_st= //st in date format same as dt
jslearner
источник
1
О, я сейчас в замешательстве. Ты хочешь Date -> Stringили String -> Date?
Феликс Клинг
10
рассмотрите momentjs.com
hanshenrik

Ответы:

829

Наилучшим форматом строки для разбора строки является формат ISO даты вместе с конструктором объекта JavaScript Date.

Примеры формата ISO: YYYY-MM-DDили YYYY-MM-DDTHH:MM:SS.

Но ждать! Просто использование «формата ISO» само по себе не работает надежно. Строка иногда анализируется как UTC, а иногда как местное время (в зависимости от поставщика и версии браузера). Лучше всего всегда хранить даты в формате UTC и производить вычисления в формате UTC.

Чтобы разобрать дату в формате UTC, добавьте Z - например new Date('2011-04-11T10:20:30Z').

Чтобы отобразить дату в формате UTC, используйте .toUTCString(),
чтобы отобразить дату по местному времени пользователя, используйте .toString().

Больше информации о MDN | Дата и этот ответ .

Для старых Internet Explorer , совместимости (версии IE менее 9 не поддерживает формат ISO в Date конструктору), вы должны разделить DATETIME строковое представление на его детали , а затем вы можете использовать конструктор с использованием даты - времени частей, например: new Date('2011', '04' - 1, '11', '11', '51', '00'). Обратите внимание, что число месяца должно быть на 1 меньше.


Альтернативный метод - используйте соответствующую библиотеку:

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

Павел Ходек
источник
Я также должен был использовать метод «разбить строку» для сафари для того же вопроса «Нэн», который поднял Пол Томблин. new Date ('2011-04-11 11:51:00') вернет 'недопустимая дата'.
Амос
1
@Amos: обратите внимание на букву T, которая разделяет дату и время. Если вы напишите, new Date('2011-04-11T11:51:00')дата создания действительна.
Павел Ходек
К сожалению, я столкнулся с проблемой, что * это не работает для ВСЕХ пользователей .
Роман Подлинов
3
Разрешение Date анализировать строку - худший способ создания объекта Date. Гораздо лучше разобрать строку вручную и вызвать Date как конструктор. Некоторые браузеры обрабатывают строку ISO без часового пояса как UTC, другие - как локальные.
RobG
6
@Ben Taliadoros: Да, это недопустимо во всех распространенных браузерах, new Date('1970-30-02')недопустимая дата, потому что в году нет 30 месяцев. Вы не можете переполнить месяцы, но когда вы переполняете дни, это разрешается в Chrome и Firefox в допустимую дату: new Date('1970-02-30')это тот же день, что и новая дата ('1970-03-02').
Павел Ходек
291

К сожалению, я узнал, что

var mydate = new Date('2014-04-03');
console.log(mydate.toDateString());

возвращает «ср 02 апреля 2014». Я знаю, это звучит безумно, но это случается с некоторыми пользователями.

Решение пуленепробиваемое состоит в следующем:

var parts ='2014-04-03'.split('-');
// Please pay attention to the month (parts[1]); JavaScript counts months from 0:
// January - 0, February - 1, etc.
var mydate = new Date(parts[0], parts[1] - 1, parts[2]); 
console.log(mydate.toDateString());

Роман Подлинов
источник
45
Это совсем не сумасшествие, корректировка, скорее всего, вызвана включением DST . Даты в формате yyyy-MM-ddанализируются как UTC, и toString возвращает местное время, поэтому в зависимости от часового пояса пользователя он может определенно возвращать разные результаты. Если вы всегда хотите установить время в формате UTC, вам следует использовать toUTCString .
Джеймс
Я бился головой об этом. Кажется, это работает, но я не понимаю, почему вы использовали части [0] -1, а не только части [0].
Адам Янгерс
4
@AdamYoungers В связи с тем, что Javascript считает месяцы с 0: январь - 0, февраль - 1 и т. Д.
Роман Подлинов
1
Этот ответ предполагает, что поведение в примере является неправильным. Согласно спецификации: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… (см .: datestring) приведенное значение в примере будет правильным
Джеймс Росс,
124
var st = "26.04.2013";
var pattern = /(\d{2})\.(\d{2})\.(\d{4})/;
var dt = new Date(st.replace(pattern,'$3-$2-$1'));

И вывод будет:

dt => Date {Fri Apr 26 2013}
serega386
источник
5
К сожалению, есть проблема с этим решением. Подробности здесь: stackoverflow.com/questions/17959660/…
Роман Подлинов
Вывод неизвестен, потому что ваш код ничего не преобразует в строку и ничего не выводит.
Роберт Симер
81
function stringToDate(_date,_format,_delimiter)
{
            var formatLowerCase=_format.toLowerCase();
            var formatItems=formatLowerCase.split(_delimiter);
            var dateItems=_date.split(_delimiter);
            var monthIndex=formatItems.indexOf("mm");
            var dayIndex=formatItems.indexOf("dd");
            var yearIndex=formatItems.indexOf("yyyy");
            var month=parseInt(dateItems[monthIndex]);
            month-=1;
            var formatedDate = new Date(dateItems[yearIndex],month,dateItems[dayIndex]);
            return formatedDate;
}

stringToDate("17/9/2014","dd/MM/yyyy","/");
stringToDate("9/17/2014","mm/dd/yyyy","/")
stringToDate("9-17-2014","mm-dd-yyyy","-")
Касем
источник
3
Обрабатывает даты всех вариаций, а не только форматирование в США
Марк Джонс
4
@MarkJones Не доверяйте .indexOf()методу, так как он не совместим с разными браузерами без полифайлов. Вместо этого используйте более совместимые .match()или .test()ванильные методы JS.
Александр Диксон
1
Добавляя var _delimiter = _format.match(/\W/g)[0];в начало функции, вы можете автоматически получить разделитель и предварительно найти 3-й параметр.
campsjos
39

moment.js ( http://momentjs.com/ ) - это полный и удобный пакет для дат использования и поддерживает строки ISO 8601 .

Вы можете добавить строку даты и формата.

moment("12-25-1995", "MM-DD-YYYY");

И вы можете проверить, если дата действительна.

moment("not a real date").isValid(); //Returns false

Некоторые примеры отображения

let dt = moment("02-01-2019", "MM-DD-YYYY");
console.log(dt.fromNow()+' |'+dt.format('LL')) 
// output: "3 months ago | February 1, 2019"

Смотрите документацию http://momentjs.com/docs/#/parsing/string-format/

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

Хуан Кайседо
источник
1
Некоторые примеры отображения выводят let dt = moment("02-01-2019", "MM-DD-YYYY");console.log(dt.fromNow()+' | '+dt.format('LL')) : «3 месяца назад | 1 февраля 2019 года»
CPHPython
36

Передайте это как аргумент Date ():

var st = "date in some format"
var dt = new Date(st);

Вы можете получить доступ дату, месяц, год , используя, например: dt.getMonth().

oblig
источник
8
я делаю console.log(new Date('30-08-2018'))и получаю недопустимую дату
Дуиг
В этом ответе игнорируется множество сложностей, связанных с этой проблемой, например, если я сделаю это для даты 01/02/2020на моем компьютере (в Великобритании), он вернется 1 февраля, и, как если бы то же самое было сделано в США, он вернется 2 января. Вы никогда не должны использовать эту наивную реализацию. Вместо этого используйте момент .
Лиам
23

Если вы можете использовать потрясающую библиотеку моментов (например, в проекте Node.js), вы можете легко проанализировать дату, используя, например,

var momentDate = moment("2014-09-15 09:00:00");

и может получить доступ к объекту даты JS через

momentDate ().toDate();
H6.
источник
5
пожалуйста, обратите внимание, что момент отлично работает без узла
shaheer
Я получил ошибку NaN на устройствах Android и IOS при использовании этого кода, однако он работал на рабочем столе. Вот код, который я использовал раньше: var dateTimeOfTimeIn = new Date (year + "-" + month + "-" + day + "T" + data.timeIn); Используя этот подход и библиотеку моментов, моя проблема была решена, и теперь мой код работает нормально на всех моих устройствах!
Мехди
20

new Date(2000, 10, 1) даст вам "ср 01 ноября 2000 00:00:00 по Гринвичу + 0100 (CET)"

Смотрите, что 0 за месяц дает вам январь

Торстен Беккер
источник
19

Для тех, кто ищет крошечное и умное решение:

String.prototype.toDate = function(format)
{
  var normalized      = this.replace(/[^a-zA-Z0-9]/g, '-');
  var normalizedFormat= format.toLowerCase().replace(/[^a-zA-Z0-9]/g, '-');
  var formatItems     = normalizedFormat.split('-');
  var dateItems       = normalized.split('-');

  var monthIndex  = formatItems.indexOf("mm");
  var dayIndex    = formatItems.indexOf("dd");
  var yearIndex   = formatItems.indexOf("yyyy");
  var hourIndex     = formatItems.indexOf("hh");
  var minutesIndex  = formatItems.indexOf("ii");
  var secondsIndex  = formatItems.indexOf("ss");

  var today = new Date();

  var year  = yearIndex>-1  ? dateItems[yearIndex]    : today.getFullYear();
  var month = monthIndex>-1 ? dateItems[monthIndex]-1 : today.getMonth()-1;
  var day   = dayIndex>-1   ? dateItems[dayIndex]     : today.getDate();

  var hour    = hourIndex>-1      ? dateItems[hourIndex]    : today.getHours();
  var minute  = minutesIndex>-1   ? dateItems[minutesIndex] : today.getMinutes();
  var second  = secondsIndex>-1   ? dateItems[secondsIndex] : today.getSeconds();

  return new Date(year,month,day,hour,minute,second);
};

Пример:

"22/03/2016 14:03:01".toDate("dd/mm/yyyy hh:ii:ss");
"2016-03-29 18:30:00".toDate("yyyy-mm-dd hh:ii:ss");
Ариван Бастос
источник
Работает как шарм! Ты спас мне жизнь чувак!
Стив Носсе
12

Если вы хотите конвертировать из формата "дд / мм / гггг". Вот пример:

var pattern = /^(\d{1,2})\/(\d{1,2})\/(\d{4})$/;
var arrayDate = stringDate.match(pattern);
var dt = new Date(arrayDate[3], arrayDate[2] - 1, arrayDate[1]);

Это решение работает в версиях IE менее 9.

Александр Н.
источник
12

Метки времени должны быть приведены к числу

var ts = '1471793029764';
ts = Number(ts); // cast it to a Number
var date = new Date(ts); // works

var invalidDate = new Date('1471793029764'); // does not work. Invalid Date
Лаки Сони
источник
1
Как насчет undefinedстоимости? Нравится var date = new Date(undefined):?
Бенни Нойгебауэр
@BennyNeugebauer тщательно проверяет, является ли значение неопределенным, прежде чем пытаться передать его конструктору Date. Может быть, вы хотите сгенерировать исключение или, может быть, вы хотите вернуться к дате по умолчанию, кто знает?
Lucky Soni
9

Date.parseпочти получает то, что вы хотите. Он задыхается на am/ pmчасть, но с некоторым взломом вы можете заставить его работать:

var str = 'Sun Apr 25, 2010 3:30pm',
    timestamp;

timestamp = Date.parse(str.replace(/[ap]m$/i, ''));

if(str.match(/pm$/i) >= 0) {
    timestamp += 12 * 60 * 60 * 1000;
}
niksvp
источник
6

Преобразовать в формат pt-BR:

    var dateString = "13/10/2014";
    var dataSplit = dateString.split('/');
    var dateConverted;

    if (dataSplit[2].split(" ").length > 1) {

        var hora = dataSplit[2].split(" ")[1].split(':');
        dataSplit[2] = dataSplit[2].split(" ")[0];
        dateConverted = new Date(dataSplit[2], dataSplit[1]-1, dataSplit[0], hora[0], hora[1]);

    } else {
        dateConverted = new Date(dataSplit[2], dataSplit[1] - 1, dataSplit[0]);
    }

Я надеюсь помочь кому-нибудь !!!

Марсело Ребушас
источник
5

Я создал для этого скрипку, вы можете использовать функцию toDate () для любой строки даты и указать формат даты. Это вернет вам объект Date. https://jsfiddle.net/Sushil231088/q56yd0rp/

"17/9/2014".toDate("dd/MM/yyyy", "/")
Сушил Махаджан
источник
4

Для преобразования строки на сегодняшний день в JS я использую http://momentjs.com/

moment().format('MMMM Do YYYY, h:mm:ss a'); // August 16th 2015, 4:17:24 pm
moment().format('dddd');                    // Sunday
moment().format("MMM Do YY");               // Aug 16th 15
moment().format('YYYY [escaped] YYYY');     // 2015 escaped 2015
moment("20111031", "YYYYMMDD").fromNow(); // 4 years ago
moment("20120620", "YYYYMMDD").fromNow(); // 3 years ago
moment().startOf('day').fromNow();        // 16 hours ago
moment().endOf('day').fromNow();          // in 8 hours
Алексей Попов
источник
1
момент () по умолчанию принимает текущую дату. Как отформатировать строку в формате «2016-06-27 17: 49: 51.951602 + 05: 30» с использованием момента.
Zoran777
4

Я сделал эту функцию для преобразования любого объекта Date в объект UTC Date.

function dateToUTC(date) {
    return new Date(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(), date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds());
}


dateToUTC(new Date());
Энди
источник
3

Еще один способ сделать это:

String.prototype.toDate = function(format) {
    format = format || "dmy";
    var separator = this.match(/[^0-9]/)[0];
    var components = this.split(separator);
    var day, month, year;
    for (var key in format) {
        var fmt_value = format[key];
        var value = components[key];
        switch (fmt_value) {
            case "d":
                day = parseInt(value);
                break;
            case "m":
                month = parseInt(value)-1;
                break;
            case "y":
                year = parseInt(value);
        }
    }
    return new Date(year, month, day);
};
a = "3/2/2017";
console.log(a.toDate("dmy"));
// Date 2017-02-03T00:00:00.000Z
Mackraken
источник
Ах! Ухоженная! Наконец, код, который заботится о том, какой разделитель используется.
Сэм Сирри
3

Вы можете попробовать это:

function formatDate(userDOB) {
  const dob = new Date(userDOB);

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

  const day = dob.getDate();
  const monthIndex = dob.getMonth();
  const year = dob.getFullYear();

  // return day + ' ' + monthNames[monthIndex] + ' ' + year;
  return `${day} ${monthNames[monthIndex]} ${year}`;
}

console.log(formatDate('1982-08-10'));

Сайед
источник
2
var date = new Date(year, month, day);

или

var date = new Date('01/01/1970');

строка даты в формате '01 -01-1970' не будет работать в FireFox, поэтому лучше использовать «/» вместо «-» в строке формата даты.

Ravi
источник
моя строка "2015/08/03 13:06:16" в FF, она не работает
Дхара
2

Если вам нужно проверить содержимое строки перед преобразованием в формат даты:

// Convert 'M/D/YY' to Date()
mdyToDate = function(mdy) {
  var d = mdy.split(/[\/\-\.]/, 3);

  if (d.length != 3) return null;

  // Check if date is valid
  var mon = parseInt(d[0]), 
      day = parseInt(d[1]),
      year= parseInt(d[2]);
  if (d[2].length == 2) year += 2000;
  if (day <= 31 && mon <= 12 && year >= 2015)
    return new Date(year, mon - 1, day);

  return null; 
}
Адриано П
источник
2

Я создал функцию parseDateTime для преобразования объекта строки в дату, и она работает во всех браузерах (включая браузер IE), проверьте, если кто-то требуется, обратитесь к https://github.com/Umesh-Markande/Parse-String-to-Date -в-все-браузер

    function parseDateTime(datetime) {
            var monthNames = [
                "January", "February", "March",
                "April", "May", "June", "July",
                "August", "September", "October",
                "November", "December"
              ];
            if(datetime.split(' ').length == 3){
                var date = datetime.split(' ')[0];
                var time = datetime.split(' ')[1].replace('.00','');
                var timearray = time.split(':');
                var hours = parseInt(time.split(':')[0]);
                var format = datetime.split(' ')[2];
                var bits = date.split(/\D/);
                date = new Date(bits[0], --bits[1], bits[2]); /* if you change format of datetime which is passed to this function, you need to change bits e.x ( bits[0], bits[1], bits[2 ]) position as per date, months and year it represent bits array.*/
                var day = date.getDate();
                var monthIndex = date.getMonth();
                var year = date.getFullYear();
                if ((format === 'PM' || format === 'pm') && hours !== 12) {
                    hours += 12;
                    try{  time = hours+':'+timearray[1]+':'+timearray[2] }catch(e){ time = hours+':'+timearray[1] }
                } 
                var formateddatetime = new Date(monthNames[monthIndex] + ' ' + day + '  ' + year + ' ' + time);
                return formateddatetime;
            }else if(datetime.split(' ').length == 2){
                var date = datetime.split(' ')[0];
                var time = datetime.split(' ')[1];
                var bits = date.split(/\D/);
                var datetimevalue = new Date(bits[0], --bits[1], bits[2]); /* if you change format of datetime which is passed to this function, you need to change bits e.x ( bits[0], bits[1], bits[2 ]) position as per date, months and year it represent bits array.*/
                var day = datetimevalue.getDate();
                var monthIndex = datetimevalue.getMonth();
                var year = datetimevalue.getFullYear();
                var formateddatetime = new Date(monthNames[monthIndex] + ' ' + day + '  ' + year + ' ' + time);
                return formateddatetime;
            }else if(datetime != ''){
                var bits = datetime.split(/\D/);
                var date = new Date(bits[0], --bits[1], bits[2]); /* if you change format of datetime which is passed to this function, you need to change bits e.x ( bits[0], bits[1], bits[2 ]) position as per date, months and year it represent bits array.*/
                return date;
            }
            return datetime;
        }

    var date1 = '2018-05-14 05:04:22 AM';   // yyyy-mm-dd hh:mm:ss A
    var date2 = '2018/05/14 05:04:22 AM';   // yyyy/mm/dd hh:mm:ss A
    var date3 = '2018/05/04';   // yyyy/mm/dd
    var date4 = '2018-05-04';   // yyyy-mm-dd
    var date5 = '2018-05-14 15:04:22';   // yyyy-mm-dd HH:mm:ss
    var date6 = '2018/05/14 14:04:22';   // yyyy/mm/dd HH:mm:ss

    console.log(parseDateTime(date1))
    console.log(parseDateTime(date2))
    console.log(parseDateTime(date3))
    console.log(parseDateTime(date4))
    console.log(parseDateTime(date5))
    console.log(parseDateTime(date6))

**Output---**
Mon May 14 2018 05:04:22 GMT+0530 (India Standard Time)
Mon May 14 2018 05:04:22 GMT+0530 (India Standard Time)
Fri May 04 2018 00:00:00 GMT+0530 (India Standard Time)
Fri May 04 2018 00:00:00 GMT+0530 (India Standard Time)
Mon May 14 2018 15:04:22 GMT+0530 (India Standard Time)
Mon May 14 2018 14:04:22 GMT+0530 (India Standard Time)
Умеш Марканде
источник
Этот работал для меня. Спасибо.
Кристофер Д. Эмерсон
2

Этот ответ основан на ответе Кассема, но он также обрабатывает двузначные годы. Я внес изменение в ответ Кассема, но в случае, если оно не было одобрено, я также отправляю его как отдельный ответ.

function stringToDate(_date,_format,_delimiter) {
        var formatLowerCase=_format.toLowerCase();
        var formatItems=formatLowerCase.split(_delimiter);
        var dateItems=_date.split(_delimiter);
        var monthIndex=formatItems.indexOf("mm");
        var dayIndex=formatItems.indexOf("dd");
        var yearIndex=formatItems.indexOf("yyyy");
        var year = parseInt(dateItems[yearIndex]); 
        // adjust for 2 digit year
        if (year < 100) { year += 2000; }
        var month=parseInt(dateItems[monthIndex]);
        month-=1;
        var formatedDate = new Date(year,month,dateItems[dayIndex]);
        return formatedDate;
}

stringToDate("17/9/14","dd/MM/yyyy","/");
stringToDate("17/9/2014","dd/MM/yyyy","/");
stringToDate("9/17/2014","mm/dd/yyyy","/")
stringToDate("9-17-2014","mm-dd-yyyy","-")
Даниэль Патру
источник
1

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

//example : let dateString = "2018-08-17 01:02:03.4"

function strToDate(dateString){
    let reggie = /(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2}).(\d{1})/
  , [,year, month, day, hours, minutes, seconds, miliseconds] = reggie.exec(dateString)
  , dateObject = new Date(year, month-1, day, hours, minutes, seconds, miliseconds);
  return dateObject;
}
alert(strToDate(dateString));
TungHarry
источник
1

Представление

Сегодня (2020.05.08) я выполняю тесты для выбранных решений - для двух случаев: дата ввода - строка ISO8601 (Ad, Bd, Cd, Dd, Ed), а дата ввода - метка времени (At, Ct, Dt). Решения Bd, Cd, Ct не возвращают объект Date в качестве результатов, но я добавляю их, потому что они могут быть полезны, но я не сравниваю их с действительными решениями. Эти результаты могут быть полезны для массивного анализа даты.

Выводы

  • Решение new Date (Ad) в 50-100 раз быстрее, чем moment.js (Dd) для всех браузеров для даты и времени ISO.
  • Решение new Date(Ad) примерно в 10 раз быстрее, чемparseDate (Ed)
  • Решение Date.parse(Bd) является самым быстрым, если нужно получить метку времени от даты ISO во всех браузерах

введите описание изображения здесь

подробности

Я выполняю тестирование на MacOs High Sierra 10.13.6 на Chrome 81.0, Safari 13.1, Firefox 75.0. Решение parseDate(Ed) использовать new Date(0)и вручную установить компоненты даты UTC.

Результаты для хрома

введите описание изображения здесь

Камил Келчевски
источник
0

Строки даты в соответствии с ISO 8601, как и стандарт, все еще не получили широкого распространения.

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

http://dygraphs.com/date-formats.html

Да, это означает, что ваша строка даты может быть такой же простой, как и

"2014/10/13 23:57:52" вместо "2014-10-13 23:57:52"

Таверас
источник
0
                //little bit of code for Converting dates 

                var dat1 = document.getElementById('inputDate').value;
                var date1 = new Date(dat1)//converts string to date object
                alert(date1);
                var dat2 = document.getElementById('inputFinishDate').value;
                var date2 = new Date(dat2)
                alert(date2);
Pec1983
источник
0

используйте этот код: (моя проблема была решена с этим кодом)

function dateDiff(date1, date2){
var diff = {}                           // Initialisation du retour
var tmp = date2 - date1;

tmp = Math.floor(tmp/1000);             // Nombre de secondes entre les 2 dates
diff.sec = tmp % 60;                    // Extraction du nombre de secondes

tmp = Math.floor((tmp-diff.sec)/60);    // Nombre de minutes (partie entière)
diff.min = tmp % 60;                    // Extraction du nombre de minutes

tmp = Math.floor((tmp-diff.min)/60);    // Nombre d'heures (entières)
diff.hour = tmp % 24;                   // Extraction du nombre d'heures

tmp = Math.floor((tmp-diff.hour)/24);   // Nombre de jours restants
diff.day = tmp;

return diff;

}

Fetra
источник
3
пожалуйста, объясните свой ответ
Mazz
Параметры date1 и date2 должны иметь формат даты справа.
Fetra
дата возврата функции с именем diff. Если вы хотите, чтобы число дней возвращалось, просто сделайте так: var result = dateDiff (date1, date2); var day_number = result.day; это легко
Fetra
0

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

<!DOCTYPE html>
<html>
  <head>
    <style>
    </style>
  </head>
  <body>
    <div>
      <span>day:
      </span> 
      <span id='day'>
      </span>
    </div>
    <div>
      <span>month:
      </span> 
      <span id='month'>
      </span>
    </div>
    <div>
      <span>year:
      </span> 
      <span id='year'>
      </span>
    </div>
    <br/>
    <input type="button" id="" value="convert" onClick="convert('/','28/10/1980')"/>
    <span>28/10/1980
    </span>
    <script>
      function convert(delimiter,dateString)
      {
        var splitted = dateString.split('/');
        // create a new date from the splitted string 
        var myDate = new Date(splitted[2],splitted[1],splitted[0]);
        // now you can access the Date and use its methods 
        document.getElementById('day').innerHTML = myDate.getDate();
        document.getElementById('month').innerHTML = myDate.getMonth();
        document.getElementById('year').innerHTML = myDate.getFullYear();
      }
    </script>
  </body>
</html>
jonathana
источник
0

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

function parseDate(dateStr, format) {
  const regex = format.toLocaleLowerCase()
    .replace(/\bd+\b/, '(?<day>\\d+)')
    .replace(/\bm+\b/, '(?<month>\\d+)')
    .replace(/\by+\b/, '(?<year>\\d+)')
  
  const parts = new RegExp(regex).exec(dateStr) || {};
  const { year, month, day } = parts.groups || {};
  return parts.length === 4 ? new Date(year, month-1, day) : undefined;
}

const printDate = x => console.log(x ? x.toLocaleDateString() : x);

printDate(parseDate('05/11/1896', 'dd/mm/YYYY'));
printDate(parseDate('07-12-2000', 'dd-mm-yy'));
printDate(parseDate('07:12:2000', 'dd:mm:yy'));
printDate(parseDate('2017/6/3', 'yy/MM/dd'));
printDate(parseDate('2017-6-15', 'y-m-d'));
printDate(parseDate('2015 6 25', 'y m d'));
printDate(parseDate('2015625', 'y m d')); // bad format

jo_va
источник
хорошее решение, но вы, возможно, не знаете, что Firefox по-прежнему не поддерживает именованные группы RegExp - bugzilla.mozilla.org/show_bug.cgi?id=1362154 (PS: это не я, кто отклонил ваш ответ)
qdev