2013-05-29 126 views
12

我在我的網頁上有一個輸入,我可以通過獲取ISO字符串並拔出前10個字符來設置日期。如何解析HTML5日期輸入中的日期?

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

這很好。我的問題是,當我試圖讓日期回來。我得到一天的日期。

var newDate = new Date(dateInput.value); 

我也曾嘗試下面的代碼,以彌補它,但它並不總是正確的或者

新的日期(Date.parse(element.value)+ 86400000)

所以我的問題是:是否有一個優雅的方式來獲得正確的日期一致。我一直在尋找一段時間,但似乎與JavaScript中的日期解析沒有太大的一致性。

+0

'date'的值來自哪裏? – Achrome

+0

認爲你會發現很好的用於momentjs.com – krasu

+0

date = new Date(); – duckbrain

回答

6

它將日期解釋爲UTC,對於大多數時區而言,它會使其看起來像「昨天」。一種解決方案可能是將時區偏移量添加回日期以將其「轉換」爲當地時區。

+1

你是對的。我不再在做這個項目,但這是對這個問題的正確答案。 – duckbrain

+0

@Duckbrain這就是爲什麼[我問你是什麼時區](http://stackoverflow.com/questions/16825363/how-do-you-parse-a-date-from-an-html5-date-input/ 16825411#comment24259218_16825411)... – robertc

19

如果這是一個支持瀏覽器上的實際date輸入,那麼它將有一個valueAsDate property。沒有必要解析它。

+0

很酷。我不知道那個財產,但它給我同樣的問題。日期比我放入盒子的時間晚了一天。我想知道它是否是我的瀏覽器。我正在使用Chrome 27.0.1453.94米。我在Internet Explorer上嘗試過它,它不支持該屬性(意外)。 – duckbrain

+1

Firefox根本不支持它。太糟糕了。無論如何,我只需要它在基於Web-kit的瀏覽器上工作。 (iPhone和Android)。 – duckbrain

+0

@Duckbrain你確定日期是在一天後?你在什麼時區? – robertc

1

Javascript日期的getDate()函數是基於零的,而不是一個基於。這裏有一個例子:

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; 

選擇一個日期,然後點擊按鈕。請注意,getDate()值將比日曆中的月份的日期少一個,因爲它基於零。

+0

我知道getDate()方法是基於零的,所以是getMonth(),但是當我得到或在輸入中設置值時,我不會調用任何一個。不過謝謝。 – duckbrain

0

正如Marty所說,問題在於輸入時區(由wc3c定義的UTC)和JS時區(本地)之間的區別。解決的辦法是使用getTimezoneOffset(在分鐘)和一切轉換爲毫秒:毫秒

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

86400000 =毫秒一天的

today.getTimezoneOffset()* 60000 = timezoneoffset的

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

這將在任何時區給出正確的日期。