Converti una stringa in una data in JavaScript

Nithin Krishnan 12 ottobre 2023
  1. Usa la funzione new Date() per convertire la stringa in data in JavaScript
  2. Usa la funzione Date.parse() per convertire la stringa in data in JavaScript
  3. Dividi la stringa e convertila in data in JavaScript
  4. Conclusione
Converti una stringa in una data in JavaScript

A volte è necessario convertire una stringa in un formato di data. La stringa può essere un valore di data memorizzato come stringa nel database o un valore restituito dall’API. In entrambi i casi, questo valore stringa non può essere utilizzato direttamente nei selettori di data o nel tipo di input data. Pertanto, la stringa dovrà essere convertita in un oggetto data da visualizzare nell’interfaccia utente HTML. Essendo in un formato stringa, non è possibile eseguire operazioni specifiche della data. Quindi dobbiamo convertire la stringa in un oggetto data. Di seguito elenchiamo alcuni modi per convertire una stringa in una data:

  • new Date()
  • Date.parse()
  • Dividi e converti in Data

Usa la funzione new Date() per convertire la stringa in data in JavaScript

Il modo più comunemente usato per convertire una stringa alla data è con la funzione new Date(). new Date() accetta argomenti nelle varie forme descritte di seguito ma restituisce un oggetto data.

  1. Nessun parametro come argomento. new Date() restituirà la data e l’ora del sistema corrente, comprese le informazioni sul fuso orario nell’ora del sistema locale, se nessun parametro viene passato alla funzione new Date().
  2. Passaggio dell’oggetto data come argomento. Il new Date() restituirà un oggetto data come rappresentato dalla stringa della data passata come argomento.
  3. Passaggio di una data stringa. La parte più interessante della funzione new Date('2018-12-3') è che può convertire una data passata in un formato stringa come argomento in un formato data. Ne discuteremo in dettaglio.

Passaggio di una data stringa come argomento

Quando passiamo una data in formato stringa a new Date(), viene convertita in un oggetto data. Il formato della stringa deve essere YYYY-MM-DD, il formato ISO 8601, perché funzioni. Altri formati di data potrebbero non essere convertiti in un oggetto data con questo metodo. Ad esempio, fare riferimento al codice come segue:

new Date('2021-05-23');
new Date('2020/2/29');
new Date('2020-14-03');
new Date('14-02-2021');

Produzione:

Sun May 23 2021 05:30:00 GMT+0530 (India Standard Time)
Sat Feb 29 2020 00:00:00 GMT+0530 (India Standard Time)
Invalid Date
Invalid Date

Come puoi vedere dagli esempi precedenti, l’unico formato di stringa accettato per la data è 2021-05-23 e 2020/2/29. La funzione new Date() può elaborare stringhe nel formato YYYY-MM-DD o YYYY/MM/DD. Se abbiamo un formato di stringa diverso che non è conforme agli standard ISO 8601, la new Date() non sarà in grado di analizzare la data e tornerà come una data non valida.

Osservazioni

  • new Date() può essere utilizzato per convertire la stringa in una data solo se qualifica il formato ISO 8601 YYYY-MM-DD hh:mm:ss.
  • Per un formato diverso che non può essere compreso da new Date(), è meglio dividere la stringa e passarli come argomenti in new Date(), come introdotto più avanti in questo articolo.
  • new Date() può anche convertire una stringa del formato 01 Mar 2020 12:30 o anche MM DD YYYYY HH:mm. Nel caso in cui stiamo usando un valore passato dal backend tramite API per la conversione, dovremmo assicurarci che il formato passato sia come compreso dalla funzione new Date(), ed è bene controllare che new Date() restituisca un oggetto data valido. Altrimenti il ​​codice potrebbe non funzionare.

Usa la funzione Date.parse() per convertire la stringa in data in JavaScript

Date.parse() è un’opzione alternativa per convertire la data della stringa. Restituisce un valore numerico invece di un oggetto data. Quindi richiederà un’ulteriore elaborazione se ci si aspetta un oggetto data. Converte la data analizzata in un numero che rappresenta i millisecondi trascorsi dalla mezzanotte del 1° gennaio 1970. È simile al formato timestamp con la differenza che invece di secondi, Date.parse() restituisce un valore in millisecondi.

Date.parse('2020-11-21')
Date.parse('2019-01-01T12:30:00.000Z')
Date.parse('20-11-2021')
Date.parse('11-20-2021')

Produzione:

1605916800000
1546345800000
NaN
1637346600000

È degno di nota che Date.parse() è uguale a new Date() quando si tratta del tipo di valori di input che può accettare, ma offre una mano migliore per controllare se la data è di un formato valido. Un tale metodo è utile, soprattutto quando abbiamo a che fare con un valore di risposta API. In questi casi, potremmo aver bisogno di eseguire un controllo per assicurarci che il valore restituito dal backend sia conforme al formato della data accettato dalla funzione Date.parse() o anche dalla funzione new Date(). Solo un controllo isNaN() può aiutare a identificare e ad atterrare in sicurezza nel metodo di conversione della data.

let stringsFromAPI = ['2020-11-21', '20-11-2021'];

stringsFromAPI.forEach((d) => {
  if (!isNaN(Date.parse(d))) {
    console.log(new Date(d));
  }
})

Produzione:

Sat Nov 21 2020 05:30:00 GMT+0530 (India Standard Time)

Nota che qui la data 20-11-2021 ha il formato DD-MM-YYYY. Quindi, non sarà compreso dalla funzione Date.parse() né dalla funzione new Date(). Quindi, se stringsFromAPI fosse un valore proveniente dal backend, la funzione precedente convertirà solo le date conformi al formato accettabile. Il !isNaN(Date.parse(d)) rifiuta silenziosamente il valore di data improprio e registra il valore che ha avuto successo nella conversione.

Osservazioni

  • Date.parse() è simile a new Date() eccetto per il tipo di ritorno, che lo rende adatto per controllare se un valore di data è di un formato corretto e può anche essere usato per assegnare una data usando il dateObj.setTime(Date.parse(DateString)).
  • Rispetto a Unix Time Stamp, Date.parse() restituisce millisecondi che possono essere usati per il confronto preciso delle date anche senza convertirli in oggetti di data effettivi con new Date().
  • Date.parse() utilizza internamente la new Date() per l’analisi della data, quindi i formati accettati dalla funzione new Date() saranno supportati anche nella funzione Date.parse().

Dividi la stringa e convertila in data in JavaScript

Entrambe le funzioni Date.parse() e new Date() sono progettate in base al formato di data esteso ISO 8601. A volte, se la data non è conforme al formato previsto, dovremo elaborarla manualmente suddividendo la stringa della data, estraendo i valori e convertendoli in un oggetto data. Sorprendentemente, il new Date() supporta anche i parametri della data da passare come argomenti, e otteniamo l’oggetto date come output.

La sintassi per creare una data dagli argomenti:

new Date(yearValue, IndexOfMonth, dayValue, hours, minutes, seconds)

Dove,

  • yearValue: deve essere conforme al formato ISO 8061 YYYY. Ad esempio, 2021. Se specifichiamo un valore nel formato YY, lo prenderà in modo sbagliato. Ad esempio, solo menzionare 21 per 2021 verrà considerato come 1921 anziché 2021.
  • IndexOfMonth: inizia con l’indice 0. Quindi, sottrai 1 dal valore del mese. Ad esempio, per marzo, il valore è 3, ma monthIndex sarà 2 (cioè 3-1 = 2). L’indice del mese dovrebbe normalmente essere compreso nell’intervallo 0-11
  • dayValue: indica il giorno del mese. Dovrebbe essere compreso tra 1 e 31, a seconda del numero di giorni in un mese. Ad esempio: per il 21-05-2021, il valore del giorno è 21
  • hours: l’ora del giorno. Ad esempio le 10 in punto.
  • minutes: i minuti dopo un’ora.
  • seconds: mantiene il valore del secondo oltre un minuto.

La seguente è una funzione che accetta una stringa con un formato di data personalizzato - DD-MM-YYYYTHH:mm:SS e restituisce un oggetto data.

function convertFromStringToDate(responseDate) {
  let dateComponents = responseDate.split('T');
  let datePieces = dateComponents[0].split('-');
  let timePieces = dateComponents[1].split(':');
  return (new Date(
      datePieces[2], (datePieces[1] - 1), datePieces[0], timePieces[0],
      timePieces[1], timePieces[2]))
}

convertFromStringToDate('21-03-2020T11:20:30')

Produzione:

Sat Mar 21 2020 11:20:30 GMT+0530 (India Standard Time)

Conclusione

La funzione new Date() più comunemente usata è piuttosto utile per convertire una data stringa in un oggetto data, a condizione che la stringa sia conforme al formato ISO 8601. Rispetto a new Date(), la funzione Date.parse() differisce in un modo che restituisce un valore numerico contenente i millisecondi dal primo gennaio del 1970 che sono trascorsi fino alla data passata come argomento stringa. È possibile convertire un formato di data diverso dividendo la stringa della data e passando i componenti della data come argomenti alla funzione new Date().

Articolo correlato - JavaScript String