2017-10-12 30 views
1

我正在使用JS函數來聲明該日期的下一個可用第一天的var日期。即今天將是11/01/2017(mm/dd/yyyy)。該功能是完美的工作,但IE 11 +不會採取它,而是拋出一些額外的功能,該表格然後會拒絕,因爲不是一個有效的日期,但在Chrome中,它的工作完美。針對IE和Chrome的ToLocaleDateString()解決方法

伊夫改變了代碼以下,這兩個瀏覽器的工作原理..

//Calculate and assign next available 1st day of the month 
var date = new Date(); 
firstDay = new Date(date.getFullYear(), date.getMonth()+1, 1); 
firstDay = (new Date(firstDay).toLocaleString('en-US').replace(/[^ -~]/g,'')); 

但是輸出爲:11/1/2017,%2012:00:00%20AM..。這是功能上正確的,因爲我的表單拾取"11/1/2017「的一部分,並忽略了其餘部分,在IE瀏覽器& Chrome上,但是我怎麼能改變上面的代碼,所以它只會刪除」,%2012:00:00%20AM「?它只是爲了整理這是沿用戶數據傳遞的URL

+0

我不明白你只是想顯示11/1/2017?如果它假設被用作字符串,那麼由於某種原因,您的變量firstDay必須是Date?你可以寫firstDay = date.getDate()+'/'+(date.getMonth()+ 1)'/'+ date.getFullYear()。或者你想要別的東西? –

+0

或甚至可能是 firstDay =(new Date(firstDay).toLocaleString('en-US'))。Substring(0,10); –

回答

3

Date.toLocaleString接受一個option參數允許聲明你想如何輸出。

你的情況,你會希望{day: 'numeric', month:'numeric', year:'numeric'}

var date = new Date(); 
 
firstDay = new Date(date.getFullYear(), date.getMonth() + 1, 1); 
 
firstDay = new Date(firstDay).toLocaleString('en-US', { 
 
     day: 'numeric', 
 
     month: 'numeric', 
 
     year: 'numeric' 
 
    }).replace(/[^ -~]/g,''); 
 
console.log(firstDay);
(這的確將是相同的 Date.toLocaleDateString不帶選項)

+0

完美的工作,但IE瀏覽器不會採取它,即時獲取屏幕上的輸出:無效的GET數據,這是我與我的最後一個功能,= 11/1/2017 ..最初的問題..如果你複製粘貼那個日期,在'='之前是一個不可見的字符,我注意到,因爲我總是必須在URL中回退兩次,甚至在這個評論框中,是否可以將.replace添加到上面的代碼片段中? – sanitizer

+0

@sanitizer當然,我把它加回來了,我不確定它做了什麼,我沒有手中的IE來體驗這個問題。 – Kaiido

+2

告訴我關於它的事情.. IE是一種痛苦。此外,.replace的添加對問題進​​行了排序,並且上面的代碼片段在Chrome和IE瀏覽器上都可以很好地工作!謝謝 – sanitizer

1

您可以使用toLocaleDateString,這會給你只是日期部分地區格式。

var d = new Date(); 
 

 
console.log(d.toLocaleDateString("en-US"));

1

您既可以使用

firstDay = date.getDate() + '/' + (date.getMonth() + 1) '/' + date.getFullYear(). 

或者

firstDay = new Date(firstDay).toLocaleString('en-US') 
相關問題