2013-05-14 14 views
6

Sto provando a scrivere del codice javascript per formattare una data come voglio, ma ho problemi a farlo funzionare su Firefox (funziona come voglio su Chrome).Javascript Data da una stringa con output diverso da Chrome a Firefox

L'input che ho in un modulo è 05/01/13 (mm/gg/aa) e voglio 2013-05-01 (aaaa/mm/gg).

Per questo, quello che ho fatto è qualcosa di simile:

var formDate = document.getElementById("start").value; 
var myDate = new Date(formDate); 
var startDate = new Date(); 

startDate.setMonth(myDate.getMonth() + 1); 
startDate.setFullYear(myDate.getFullYear()); 
var FormattedDate = startDate.getFullYear() + "-" + ((startDate.getMonth() <= 10) ? "0" : "") + startDate.getMonth() + "-01"; // the day is always 01 

alert(FormattedDate); 

si può provare su entrambi i browser qui: http://jsfiddle.net/j4BLH/

Su Google Chrome, questo codice mi dà per esempio 2013-05-01 per maggio, ma su Firefox, ho 1913-05-01.

So che avrei potuto scrivere qualcosa come "20" + startDate.getYear() ma mi chiedevo perché i risultati erano diversi da Chrome a Firefox? E forse se hai un modo migliore di scrivere il codice che ho incollato qui, per favore fammi sapere :)

Grazie!

+0

Guarda questa discussione: http://stackoverflow.com/questions/8681534/why-does-javascript-evaluate-a-2-digit-year-of-00-as-1900-instead-of-2000 – MasNotsram

+1

Sembra che firefox stia facendo qualcosa di strano, dato che la data viene memorizzata internamente in millisecondi da epoca (1970). Quindi, non dovrebbe mai restituire 1913. [(Riferimento ECMAScript)] (http://objjob.phrogz.net/js/object/224) –

+0

@SpAm grazie per il collegamento, ma in realtà non spiega perché Chrome e Firefox avere comportamenti diversi su questo. –

risposta

5

Dal spec:

Tuttavia, l'espressione Date.parse (x.toLocaleString()) non è necessaria per produrre lo stesso valore come numero precedenti tre espressioni e, in generale, la il valore prodotto da Date.parse è dipendente dall'implementazione quando viene fornito un valore di stringa che non è conforme al formato stringa di data e ora (15.9.1.15) e che non è stato possibile produrre in tale implementazione con il metodo toString o toUTCString .

Quando si crea un oggetto data passando una stringa di data al costruttore, il metodo di analisi è esattamente lo stesso di Date.parse.

Il formato della data, utilizzando un anno a 2 cifre, non è conforme allo standard. Pertanto, sembrerebbe che il modo in cui queste date vengono analizzate sia specifico dell'implementazione, il che significa che dipende dal motore JavaScript utilizzato. Nel caso di Google, di solito è V8, e in Firefox, credo sia TraceMonkey o Rhino.

In breve, è necessario utilizzare 4 anni digitali, in quanto non esiste YY nello standard JS.

+1

Grazie per questa risposta, questo riassume bene ciò che è stato detto nei commenti! –

Problemi correlati