2009-12-06 14 views
9

Questo è probabilmente qualcosa di semplice, ma sono un po 'confuso su come farlo. Come posso, utilizzando JavaScript, analizzare solo il tempo dal seguente stringa ISO 8601 Data:Usa JavaScript per Parse Time

2009-12-06T17:10:00 

In altre parole, con la stringa di cui sopra, mi piacerebbe uscita:

5:10 PM 

Qualsiasi orientamento/tutorial su questo sarebbe fantastico.

+1

Non intendevo chiuderlo come un duplicato di quella domanda: "( – Ryan

+0

Non sono d'accordo sul fatto che questo è un duplicato esatto della domanda mostrata. L'analisi dei timestamp ISO è una preoccupazione diversa dall'analisi del contributo umano. – Andrew

risposta

0

string.slice(11,16) restituirà 17:10. Da lì (possibilmente usando slice in modi più interessanti ed eccitanti) dovrebbe essere abbastanza semplice inserirlo nel formato 24 ore.

0

Questo è il cosiddetto formato ISO 8601. MochiKit è dotato di una funzione per analizzarlo,

http://mochikit.com/doc/html/MochiKit/DateTime.html

È possibile ottenere un oggetto Date come questo,

timestamp = isoTimestamp("2009-12-06T17:10:00"); 

basta copiare la funzione se non si desidera utilizzare MochiKit.

0

L'analisi della data/ora ISO è semplice, la formattazione del tempo in modo culturalmente appropriato è difficile (5:10 PM non è appropriato per tutte le impostazioni locali) Molti toolkit forniscono routine per la parte ISO ed è anche parte del nuovo ECMAScript 5 standard; solo una coppia fa la seconda parte, comunque.

Si può provare dojo.date.stamp.fromISOString e dojo.date.locale.format.

Credo che Date-JS sia in grado di formattare anche gli orari.

11

Chrome & Firefox: il costruttore di date JavaScript standard accetta la stringa di data ISO 8601. Per esempio:

var sampleDate = new Date("2010-03-07T02:13:46Z");

restituisce questo oggetto Date: "Sun Mar 07 2010 13:13:46 GMT + 1100 (AUS Eastern Daylight Time)"

Questo non funziona in IE (tra cui più recente IE 9)

Ecco una soluzione cross-browser da Paul Sowden a http://delete.me.uk/2005/03/iso8601.html:

Date.prototype.setISO8601 = function (string) { 
    var regexp = "([0-9]{4})(-([0-9]{2})(-([0-9]{2})" + 
     "(T([0-9]{2}):([0-9]{2})(:([0-9]{2})(\.([0-9]+))?)?" + 
     "(Z|(([-+])([0-9]{2}):([0-9]{2})))?)?)?)?"; 
    var d = string.match(new RegExp(regexp)); 

    var offset = 0; 
    var date = new Date(d[1], 0, 1); 

    if (d[3]) { date.setMonth(d[3] - 1); } 
    if (d[5]) { date.setDate(d[5]); } 
    if (d[7]) { date.setHours(d[7]); } 
    if (d[8]) { date.setMinutes(d[8]); } 
    if (d[10]) { date.setSeconds(d[10]); } 
    if (d[12]) { date.setMilliseconds(Number("0." + d[12]) * 1000); } 
    if (d[14]) { 
     offset = (Number(d[16]) * 60) + Number(d[17]); 
     offset *= ((d[15] == '-') ? 1 : -1); 
    } 

    offset -= date.getTimezoneOffset(); 
    time = (Number(date) + (offset * 60 * 1000)); 
    this.setTime(Number(time)); 
} 

Usage:

var date = new Date(); 
date.setISO8601("2005-03-26T19:51:34Z"); 

Se si esegue molta manipolazione datetime in JavaScript, si può anche suggerire di controllare alcune librerie JS come MomentJS. Gestisce alcune cose comuni come l'analisi delle date, la formattazione e la differenza di calcolo tra due date e ha il supporto per più localizzazioni.

Problemi correlati