Conversione di una stringa in una data in JavaScript


669

Come posso convertire una stringa in una data in JavaScript?

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

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


1
Oh, sono confuso adesso. Vuoi Date -> Stringo String -> Date?
Felix Kling l'

10

Risposte:


828

Il miglior formato di stringa per l'analisi delle stringhe è il formato ISO della data insieme al costruttore dell'oggetto JavaScript Date.

Esempi di formato ISO: YYYY-MM-DDo YYYY-MM-DDTHH:MM:SS.

Ma aspetta! L'uso del "formato ISO" non funziona in modo affidabile da solo. Le stringhe vengono talvolta analizzate come UTC e talvolta come localtime (in base al fornitore e alla versione del browser). La migliore pratica dovrebbe sempre essere quella di memorizzare le date come UTC e fare calcoli come UTC.

Per analizzare una data come UTC, aggiungere una Z - ad esempio: new Date('2011-04-11T10:20:30Z').

Per visualizzare una data in UTC, utilizzare .toUTCString(),
per visualizzare una data nell'ora locale dell'utente, utilizzare .toString().

Maggiori informazioni su MDN | Data e questa risposta .

Per vecchio Internet Explorer compatibilità (versioni di IE inferiore a 9 non supportano il formato ISO in data costruttore), si dovrebbe dividere datetime rappresentazione di stringa di sue parti e quindi è possibile utilizzare il costruttore utilizzando datetime parti, come ad esempio: new Date('2011', '04' - 1, '11', '11', '51', '00'). Si noti che il numero del mese deve essere 1 in meno.


Metodo alternativo: utilizzare una libreria appropriata:

Puoi anche sfruttare la libreria Moment.js che consente di analizzare la data con il fuso orario specificato.


Ho anche dovuto usare il metodo "split the string" per il safari per lo stesso problema "Nan" sollevato da Paul Tomblin. nuova data ("2011-04-11 11:51:00") restituirà "data non valida".
Amos,

1
@Amos: nota la lettera T, che separa la data e l'ora. Se scrivi new Date('2011-04-11T11:51:00')la data di creazione è valida.
Pavel Hodek,

Purtroppo ho riscontrato il problema che * non funziona per TUTTI gli utenti .
Roman Podlinov,

3
Letting Date analizzare una stringa è il modo peggiore per creare un oggetto Date. È molto meglio analizzare manualmente la stringa e chiamare Date come costruttore. Alcuni browser tratteranno una stringa ISO senza fuso orario come UTC, altri come locali.
RobG

6
@Ben Taliadoros: Sì, non è valido in tutti i browser comuni, new Date('1970-30-02')non è una data valida perché non ci sono 30 mesi in un anno. Non è possibile effettuare l'overflow di mesi ma quando si overflow giorni si risolve in Chrome e Firefox a una data valida: new Date('1970-02-30')è quindi lo stesso giorno della nuova data ('1970-03-02').
Pavel Hodek,

291

Purtroppo l'ho scoperto

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

restituisce "Mer 02 aprile 2014". So che sembra folle, ma succede per alcuni utenti.

La soluzione antiproiettile è la seguente:

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
Non è affatto folle, la regolazione è probabilmente causata dall'avvio dell'ora legale . Le date nel formato di yyyy-MM-ddvengono analizzate come UTC e toString restituisce l' ora locale, quindi a seconda del fuso orario degli utenti può sicuramente restituire risultati diversi. Se vuoi sempre l'ora come UTC, allora dovresti usare toUTCString .
James,

Ho sbattuto la testa su questo. Questo sembra funzionare, ma non capisco perché hai usato parti [0] -1 e non solo parti [0].
Adam Youngers

4
@AdamYoungers A causa di Javascript conta mesi da 0: gennaio - 0, febbraio - 1, ecc.
Roman Podlinov

1
Questa risposta suggerisce che il comportamento nell'esempio non è corretto. Secondo le specifiche: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… (vedi: datestring) il valore emesso nell'esempio sarebbe corretto
James Ross,


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
Gestisce le date di ogni variazione non solo della formattazione americana
Mark Jones,

4
@MarkJones Non fidarti del .indexOf()metodo in quanto non è compatibile con il browser senza polifili. Utilizzare invece i metodi JS più compatibili .match()o .test()vaniglia.
Alexander Dixon,

1
Aggiungendo var _delimiter = _format.match(/\W/g)[0];all'inizio della funzione è possibile ottenere il delimitatore automaticamente e prescindere dal 3o parametro.
Campsjos,

39

moment.js ( http://momentjs.com/ ) è un pacchetto completo e valido per le date di utilizzo e supporta stringhe ISO 8601 .

È possibile aggiungere una data e un formato stringa.

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

E puoi verificare se una data è valida.

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

Alcuni esempi di visualizzazione

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

Vedi documentazione http://momentjs.com/docs/#/parsing/string-format/

Raccomandazione: consiglio di usare un pacchetto per le date che contiene molti formati perché il fuso orario e la gestione del tempo del formato sono davvero un grosso problema, momento che js risolve molti formati. È possibile analizzare facilmente la data da una semplice stringa fino ad oggi, ma penso che sia un duro lavoro per supportare tutti i formati e le variazioni delle date.


1
Alcuni esempi di let dt = moment("02-01-2019", "MM-DD-YYYY");console.log(dt.fromNow()+' | '+dt.format('LL')) output mostrano : "3 mesi fa | 1 febbraio 2019"
CPHPython

36

Passalo come argomento a Date ():

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

È possibile accedere al data, mese, anno utilizzando, ad esempio: dt.getMonth().


8
faccio console.log(new Date('30-08-2018'))e ricevo una data non valida
Dwigh

Questa risposta ignora molteplici complessità di questo problema, ad esempio, se lo faccio per una data 01/02/2020sul mio computer (nel Regno Unito), tornerà il 1 ° febbraio dove, come se la stessa cosa fosse fatta negli Stati Uniti, tornerà il 2 gennaio. Praticamente non dovresti mai usare questa ingenua implementazione. Usa invece il momento .
Liam,

23

Se puoi usare la fantastica libreria dei momenti (ad es. In un progetto Node.js) puoi facilmente analizzare la tua data usando ad es

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

e può accedere all'oggetto data JS tramite

momentDate ().toDate();

5
si prega di notare che il momento funziona perfettamente senza nodo
shaheer

Ho riscontrato un errore NaN nei miei dispositivi Android e IOS durante l'utilizzo di questo codice, tuttavia funzionava nel desktop. ecco il codice che stavo usando prima: var dateTimeOfTimeIn = new Date (year + "-" + month + "-" + day + "T" + data.timeIn); usando questo approccio e la libreria dei momenti, il mio problema è stato risolto e il mio codice ora funziona perfettamente in tutti i miei dispositivi!
Mehdi,

20

new Date(2000, 10, 1) ti darà "Mer 01 Nov 2000 00:00:00 GMT + 0100 (CET)"

Vedi che 0 per mese ti dà gennaio


19

Per coloro che cercano una soluzione piccola e intelligente:

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

Esempio:

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

Funziona come un fascino! Mi hai salvato la vita amico!
Steve Nosse,


12

Se si desidera convertire dal formato "gg / MM / aaaa". Ecco un esempio:

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

Questa soluzione funziona con versioni IE inferiori a 9.


12

I timestamp devono essere espressi in un numero

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
E il undefinedvalore? Come var date = new Date(undefined):?
Benny Neugebauer,

@BennyNeugebauer controlla bene se un valore non è definito prima di provare a passarlo al costruttore Date. Forse vuoi lanciare un'eccezione o forse vuoi tornare a una data predefinita, chi lo sa?
Lucky Soni,

9

Date.parseti dà quasi quello che vuoi. Si soffoca nella parte am/ pm, ma con alcuni hacking puoi farlo funzionare:

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

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

Spero di aiutare qualcuno !!!



4

Per convertire la stringa fino ad oggi in js che uso 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 () per impostazione predefinita prende la data corrente. Come formattare una stringa che è nel formato "27/06/2016 17: 49: 51.951602 + 05: 30" usando moment.
Zoran777,

4

Ho creato questa funzione per convertire qualsiasi oggetto Date in un oggetto Date UTC.

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


dateToUTC(new Date());

3

Ancora un altro modo per farlo:

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

Ah! ! Neat Finalmente un codice che si occupa di qualunque separatore venga utilizzato.
Sam Sirry,

3

Puoi provare questo:

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

o

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

la stringa di data nel formato '01 -01-1970 'non funzionerà in FireFox, quindi meglio usare "/" invece di "-" nella stringa di formato della data.


la mia stringa è "strill 2015/03/03 13:06:16" in FF non funziona
Dhara

2

Se devi controllare il contenuto della stringa prima di convertirlo in formato data:

// 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

Ho creato la funzione parseDateTime per convertire la stringa in oggetto data e funziona in tutti i browser (incluso il browser IE), controlla se è necessario qualcuno, fai riferimento https://github.com/Umesh-Markande/Parse-String-to-Date -in-tutto-il browser

    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)

Questo ha funzionato per me. Grazie.
Christopher D. Emerson il

2

Questa risposta si basa sulla risposta di Kassem ma gestisce anche anni a due cifre. Ho inviato una modifica alla risposta di Kassem, ma nel caso in cui non fosse stata approvata, la sto anche inviando come risposta separata.

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

Puoi usare regex per analizzare la stringa per dettagliare l'ora, quindi creare la data o qualsiasi formato di ritorno come:

//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

Prestazione

Oggi (2020/05/08) eseguo i test per le soluzioni scelte - per due casi: la data di ingresso è ISO8601 stringa (annuncio, Bd, Cd, Dd, ndr) e l'ingresso è data timestamp (A, Ct, Dt). Le soluzioni Bd, Cd, Ct non restituiscono js Date object come risultati, ma li aggiungo perché possono essere utili ma non li confronto con soluzioni valide. Questi risultati possono essere utili per un'analisi approfondita della data.

conclusioni

  • Soluzione new Date (annuncio) è 50-100 volte più veloce di moment.js (Dd) per tutti i browser per data e timestamp ISO
  • La soluzione new Date(annuncio) è ~ 10 volte più veloce diparseDate (Ed)
  • La soluzione Date.parse(Bd) è più veloce se è necessario ottenere il timestamp dalla data ISO su tutti i browser

inserisci qui la descrizione dell'immagine

Dettagli

Eseguo test su MacO High Sierra 10.13.6 su Chrome 81.0, Safari 13.1, Firefox 75.0. La soluzione parseDate(Ed) utilizza new Date(0)e imposta manualmente i componenti della data UTC.

Risultati per Chrome

inserisci qui la descrizione dell'immagine


0

I datestring secondo ISO 8601, eccellenti quanto lo standard, non sono ancora ampiamente supportati.

Questa è un'ottima risorsa per capire quale formato di datestring dovresti usare:

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

Sì, ciò significa che il tuo datestring potrebbe essere tanto semplice quanto contrario

"2014/10/13 23:57:52" invece di "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

usa questo codice: (il mio problema è stato risolto con questo codice)

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
per favore, spiega la tua risposta
Mazz

I parametri date1 e date2 devono avere il formato come data giusto.
Fetra,

la data di ritorno della funzione denominata diff. Se vuoi il numero del giorno restituito, fai così: var result = dateDiff (date1, date2); var day_number = result.day; è facile
Fetra,

0

Ho scritto una funzione riutilizzabile che utilizzo quando ricevo stringhe di date dal server.
puoi passare il delimitatore desiderato (/ - ecc.) che separa il giorno e l'anno del mese per utilizzare il split()metodo.
puoi vederlo e provarlo su questo esempio funzionante .

<!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

Un altro modo per farlo è costruire una regex con gruppi di acquisizione con nome sulla stringa di formato e quindi utilizzare quella regex per estrarre il giorno, il mese e l'anno dalla stringa di data:

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


bella soluzione, ma forse non sei a conoscenza del fatto che Firefox non supporta ancora i gruppi denominati RegExp - bugzilla.mozilla.org/show_bug.cgi?id=1362154 (PS: non sono io che ho
annullato il downgrade della
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.