2013-05-29 2 views
12

Ho un input sulla mia pagina web che sono in grado di impostare la data ottenendo una stringa ISO e tirando fuori i primi 10 caratteri.Come si analizza una data da un input di data HTML5?

date = new Date(); 
dateInput.value = date.toISOString().substr(0,10); 

Questo funziona perfettamente. Il mio problema è che quando tento di recuperare la data. Sto ricevendo l'appuntamento un giorno di riposo.

var newDate = new Date(dateInput.value); 

Ho anche provato il seguente codice a fare per essa, ma non è sempre corretto sia

new Date (Date.parse (element.value) + 86400000)

Quindi la mia domanda è: c'è un modo elegante per ottenere la data corretta in modo coerente. Mi sono guardato intorno per un po ', ma sembra che non ci sia molta coerenza con l'analisi delle date in Javascript.

+0

Dov'è il valore di 'date'? – Achrome

+0

pensi che troverai utile per momentjs.com – krasu

+0

date = new Date(); – duckbrain

risposta

6

Sta interpretando la data come UTC, che, per la maggior parte dei fusi orari, farà sembrare "ieri". Una soluzione potrebbe essere quella di aggiungere lo spostamento fuso orario nella data per "convertirlo" nel fuso orario locale.

+1

Hai assolutamente ragione. Non sto più lavorando a questo progetto, ma questa è la risposta corretta alla domanda. – duckbrain

+0

@Duckbrain Ecco perché [ti ho chiesto in quale fuso orario ti trovavi] (http://stackoverflow.com/questions/16825363/how-do-you-parse-a-date-from-an-html5-date-input/ 16825411 # comment24259218_16825411) ... – robertc

19

Se è un vero e proprio ingresso date su un browser di supporto, avrà un valueAsDate property. Non c'è bisogno di analizzarlo.

+0

È fantastico. Non sapevo di quella proprietà, ma mi sta dando lo stesso problema. La data è un giorno dietro a quello che ho messo nella scatola. Mi chiedo se è il mio browser. Sto usando Chrome 27.0.1453.94 m. L'ho provato su Internet Explorer e non supporta la proprietà (sorpresa). – duckbrain

+1

Firefox non lo supporta affatto. Peccato. Ho solo bisogno di lavorare comunque su browser basati su Web-kit. (iPhone e Android). – duckbrain

+0

@Duckbrain Sei sicuro che la data è un giorno indietro? In che fuso orario sei? – robertc

1

La funzione getDate() di Javascript Date è basata su zero, non su una base. Ecco un esempio:

http://jsfiddle.net/R8Wub/3/

var enteredDate = document.getElementById('dateInput').valueAsDate; 
var result = "Day: " + enteredDate.getDate() + "<br/>" + 
    "Month: " + enteredDate.getMonth() + "<br/>" + 
    "Year: " + enteredDate.getFullYear(); 
document.getElementById('output').innerHTML = "Result is:<br/>" + result; 

scegliere la data e premere il pulsante. Si noti che il valore getDate() sarà inferiore al giorno del mese su un calendario, poiché è basato su zero.

+0

Sono consapevole del fatto che il metodo getDate() è a base zero, quindi è getMonth(), tuttavia non richiamo nessuno dei due quando sto ottenendo o impostando il valore nell'input. Grazie comunque. – duckbrain

0

come detto da Marty il problema è la differenza tra la rappresentazione del fuso orario dell'ingresso (UTC definito da wc3c) e il fuso orario JS (locale). La soluzione è quella di getTimezoneOffset (che è in minuti) e convertire tutto a millisecondi:

var today = document.getElementById("myInputDate").valueAsDate; 
var tomorrow = new Date(today.valueOf() + 86400000 + (today.getTimezoneOffset() * 60000)); 

86400000 = millisecondi di una giornata

today.getTimezoneOffset() * 60000 = timezoneOffset in millisecondi

1
var newDate = new Date(dateInput.value + 'T00:00'); 

Questo darà la data corretta in qualsiasi fuso orario.