Come posso convertire un valore data in formato ISO 8601 in un oggetto data in JavaScript?

StackOverflow https://stackoverflow.com/questions/498578

  •  20-08-2019
  •  | 
  •  

Domanda

Ho provato a convertire un valore di data in un formato più leggibile. Per fare ciò, sto cercando di analizzare la data utilizzando il metodo JavaScript Date.parse(). Tuttavia, ciò non funziona sull'input (ad es. "2007-09-21T14:15:34.058-07:00") che ho. L'obiettivo finale è generare una stringa di date come "January 30th, 2008 @ 2:15PM".

Qualche idea?

È stato utile?

Soluzione

Prova http://www.datejs.com/ . Si tratta di una libreria di date JavaScript con un metodo Date.parse esteso e un metodo Date.parseExact, che consente di specificare una stringa di formato. Consulta Documentazione APJ DateJS .

Altri suggerimenti

Probabilmente dovresti usare datejs che f3lix consigliato, tuttavia mi sono annoiato e ho messo insieme un piccolo oggetto che fa esattamente quello che hai chiesto:

25 settembre 2012: codice pulito, consenti formato non esteso, ad esempio 20120925T164740 + 0200

1 dicembre 2011: corretto un bug nella stringa del mese. Mancava agosto

var ISODate = {
  convert :
    function (input){
      if (!(typeof input === "string")) throw "ISODate, convert: input must be a string";
      var d = input.match(/^(\d{4})-?(\d{2})-?(\d{2})[T ](\d{2}):?(\d{2}):?(\d{2})(\.\d+)?(Z|(?:([+-])(\d{2}):?(\d{2})))$/i);
      if (!d) throw "ISODate, convert: Illegal format";
      return new Date(
        Date.UTC(
          d[1], d[2]-1, d[3],
          d[4], d[5], d[6], d[7] || 0 % 1 * 1000 | 0
        ) + (
          d[8].toUpperCase() === "Z" ? 0 :
            (d[10]*3600 + d[11]*60) * (d[9] === "-" ? 1000 : -1000)
        )
      );
    },
  format :
    function(date, utc){
      if (typeof date === "string") date = this.convert(date);
      if (!(date instanceof Date)) throw "ISODate, format: t is not a date object";

      var t={'FullYear':0, 'Month':0, 'Date':0, 'Hours':0, 'Minutes':0, 'Seconds':0};
      for (var key in t) {
        if (t.hasOwnProperty(key)) t[key] = date["get" +(utc ? "UTC" :"") + key]()
      }

      return this.month[t.Month]
        + " "
        + this.ordinal(t.Date)
        + ", "
        + t.FullYear
        + " @ "
        + this.clock12(t.Hours,t.Minutes);
      },
  month:
    [
      "January", "February", "March", "April", "May", "June",
      "July", "August", "September", "October", "November", "December"
    ],
  ordinal:
    function(n) {
      return n+(
        [
          "th", "st", "nd", "rd"
        ][
          (( n % 100 / 10) | 0) === 1 ? 0 : n % 10 < 4 ? n % 10 : 0
        ]
      );
  },
  clock12:
    function(h24, m, s){
      h24%=24;
      var h12 = (h24 % 12) || 12;
      return h12 + ":" +
        (m < 10 ? "0" + m : m) +
        (isFinite(s) ? ":" + (s < 10 ? "0" + s : s ) : "") +
        (h24 < 12 ? "AM" : "PM");
      }
};

Esempio:

//Shows the date in the users timezone:
alert(ISODate.format("2007-09-21T14:15:34.058-07:00"));

//Show the date in UTC (Timezone Z, 00:00)
alert(ISODate.format("2007-09-21T14:15:34.058-07:00",true));

Spiegazione:

converti accetta una stringa come input e restituisce un oggetto data se ha esito positivo o genera un'eccezione in caso contrario. La stringa deve essere in uno dei seguenti formati:

  • AAAA-MM-AAAAThh: mm: ss.sZ
  • AAAA-MM-AAAAThh: mm: ss.sXaa: bb

Dove:

  • AAAA è l'anno come un numero intero di 4 cifre
  • MM è il mese come numero intero a 2 cifre
  • DD è la data del mese come numero intero a 2 cifre
  • T è il carattere T o spazio (\ x20)
  • hh è l'ora nel formato 24 ore, come un numero intero a 2 cifre
  • mm è il minuto come numero intero a 2 cifre
  • ss.s è il secondo, sia come numero intero a 2 cifre o come punto mobile con 2 cifre seguito da un punto seguito da una o più cifre.
  • Z è il carattere Z (che indica il fuso orario Z, UTC + 00: 00)
  • X è un segno più (+) o meno (-) del timeoffset su UTC
  • aa è l'ora della differenza oraria su UTC come numero intero a 2 cifre
  • bb è il minuto del timeoffset per ITC come numero intero a 2 cifre

formato accetta una stringa nel formato sopra o un oggetto data e restituisce una stringa formattata come:

  • M D, Y @ h: mm

Dove   - M è il nome inglese completo del mese   - D è la data del mese con un suffisso numerico (1-2 cifre)   - Y è l'anno (1 o più cifre)   - h è l'ora nel formato 12 ore (1-2 cifre)   - m è il minuto (2 cifre)

mese è un array con il nome dei mesi

ordinale è una funzione che accetta un numero come input e restituisce il numero con il suffisso ordinale inglese.

clock12 è una funzione che richiede ora, minuti e secondi nel formato 24h e lo converte in una stringa nel formato 12h degli Stati Uniti. I secondi sono facoltativi.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top