Non so perché questo funziona, ma quello che ho trovato è se si utilizzano barre oblique o trattini influisce sulla risposta. Guarda.
new Date ('2012/03/21'); // returns: "Wed Mar 21 2012 00:00:00 GMT-0500 (CDT)"
new Date ('2012-03-21'); // returns: "Tue Mar 20 2012 19:00:00 GMT-0500 (CDT)" WHA!
Quindi, per risolvere il mio problema ho fatto una semplice espressione regolare sulla mia data di ingresso per sostituire sempre i primi tre trattini con le barre.
var strInputValue = control.value, // <-- get my date string
dteCurrent;
strInputValue = strInputValue.replace(/-/, '/') // replace 1st "-" with "/"
.replace(/-/, '/'); // replace 2nd "-" with "/"
dteCurrent = new Date(strInputValue);
Ho fatto un molto veloce ricerca su Google per il motivo per cui questo sarebbe accaduto e nessuna risposta. Ma questo dovrebbe risolvere il tuo problema. Tutto quello che devi fare è sostituire i trattini con le barre in avanti prima di passarli dove vuoi.
Modifica: scusate non ho notato la risposta già accettata prima di postare, per favore ignorate questa risposta.
Sei sicuro che questo è collegato a DatePicker? 'document.write (new Date ('2012-03-21'))' prints 'mar 20 mar 2012 20:00:00 GMT-0400 (Eastern Daylight Time)' per me. Bug anno bisestile? –
Anche con la formattazione, controlla questo: http://jsfiddle.net/fkSC5/ Passare a '2012-03-21' e' 2012/03/21' a 'Date()' fornisce risultati che sono 4 ore di distanza. –
È vero. new Date ('...') è disattivato di un giorno. – user823527