Перетворення рядка в дату в JavaScript


668

Як можна перетворити рядок у дату в JavaScript?

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

var dt_st= //st in date format same as dt


1
О, я зараз розгублений. Ви хочете Date -> Stringчи String -> Date?
Фелікс Клінг

10
розгляньте momentjs.com
hanshenrik

Відповіді:


827

Найкращий формат рядка для розбору рядків - це формат ISO дата разом із конструктором об'єкта JavaScript Дата.

Приклади формату 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, яка дозволяє проаналізувати дату за вказаним часовим поясом.


Мені також довелося використовувати метод «розділити струну» для сафарі для тієї ж «Нан», яку виховував Пол Томблін. нова дата ("2011-04-11 11:51:00") поверне "недійсну дату".
Амос

1
@Amos: Помітьте букву T, яка розділяє дату та час. Якщо ви пишете, new Date('2011-04-11T11:51:00')дата, створена, є дійсною.
Павло Ходек

На жаль, я наткнувся на те, що * він не працює для ВСІХ користувачів .
Роман Подлинов

3
Дозволити проаналізувати рядок дати - це найгірший спосіб створення об’єкта Дата. Набагато краще проаналізувати рядок вручну і назвати 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/… (див.: Датестринг) перекреслене значення в прикладі було б правильним
Джеймс Росс,

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}

5
На жаль, існує проблема з цим рішенням. Подробиці тут: stackoverflow.com/questions/17959660 / ...
Roman Podlinov

Вихід невідомий, оскільки ваш код нічого не перетворює у рядок, ані нічого не виводить.
Роберт Сімер

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-й параметр.
Campjos

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().


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

5
зауважте, що момент працює чудово без вузла
shaheer

Під час використання цього коду я отримав помилку NaN у своїх пристроях Android та IOS, однак він працював у робочому столі. ось код, яким я користувався раніше: var dateTimeOfTimeIn = нова дата (рік + "-" + місяць + "-" + день + "T" + data.timeIn); використовуючи цей підхід і бібліотеку моментів, моя проблема була вирішена, і мій код зараз працює на всіх моїх пристроях!
Мехді

20

new Date(2000, 10, 1) дасть вам "ср. 01 листопада 2000 00:00:00 GMT + 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

Якщо ви хочете конвертувати з формату "dd / MM / yyyy". Ось приклад:

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

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

Я сподіваюся допомогти комусь !!!



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
moment () за замовчуванням приймає поточну дату. Як відформатувати рядок, який знаходиться у форматі "2016-06-27 17: 49: 51.951602 + 05: 30", використовуючи момент.
Zoran777

4

Я зробив цю функцію для перетворення будь-якого об'єкта Date в об’єкт Date UTC.

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

Ах! Акуратно! Нарешті код, який бере участь у тому, який роздільник використовується.
Сем Сірі

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, тому краще використовувати "/" замість "-" у рядку формату дати.


мій рядок - "2015/08/03 13:06:16" String у FF, він не працює
Dhara

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

1

Продуктивність

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

Висновки

  • Рішення new Date (реклама) на 50-100 разів швидше, ніж moment.js (Dd) для всіх браузерів для дати та часової позначки ISO
  • Рішення new Date(реклама) на 10 разів швидше, ніжparseDate (Ед)
  • Рішення 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);

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;

}


3
поясніть, будь ласка, свою відповідь
Mazz

Параметри date1 та date2 повинні мати формат як дату.
Фетра

дата повернення функції з назвою розл. Якщо ви хочете, щоб кількість повернених днів просто так: 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>

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


приємне рішення, але ви, можливо, не знаєте, що Firefox все ще не підтримує групи з назвою RegExp - bugzilla.mozilla.org/show_bug.cgi?id=1362154 (PS: це не я, хто спростував вашу відповідь)
qdev
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.