javascript中new Date()的瀏覽器兼容性問題javascript
Date.parse(new Date($.trim($this.val().replace(/-/g,"/"))))html
Date.parse(new Date($.trim($this.val().replace(/-/g,"/"))))/1000 java
主要是日期格式的問題,只有chrome才能識別2018-07-11這樣的橫杆格式,須要改爲2018/7/1這樣的格式chrome
參考網址:瀏覽器
https://www.2cto.com/kf/201504/388173.html函數
引言: 同一種語言javascript,在不一樣的瀏覽器中,存在語言兼容性問題,本質上是因爲不一樣的瀏覽器是支持的語言標準和實現上各有差別。本文將基於new Date來建立Date對象來分析這個問題。this
1. 問題的提出, 開始時間和結束時間空間沒法正確的傳遞值spa
在頁面中,咱們使用了一個時間上的組件來開發時間選擇框,可是發如今Firefox下是沒法正常工做的,在Chrome下是能夠正常運行的。 問題出在哪裏呢?3d
2. 問題分析code
結果分析發現是因爲以下代碼產生的問題:
1
2
3
4
5
6
|
var timestart =
'2010-05-04'
;
var timeend =
'2015-04-01'
;
var time1 = (timestart+
' 00:00:00'
).toString();
var time2 = (timeend+
' 23:59:59'
).toString();
timestart =
new
Date(time1);
timeend =
new
Date(time2);
|
問題就在於 new Date(time1)這個構造函數沒法正確的生成Date對象,其值爲NaN. 怪哉,問題在哪裏呢?
3. 各個瀏覽器上的表現
在IE下的執行狀況:
在Firefox下的執行狀況:
在Chrome下的執行狀況:
經過以上的分析,能夠得知,這個javascript的腳本在Chrome下是能夠正確執行的,可是在其餘瀏覽器下報出錯誤。
4. 正確的作法
如下列出正確的作法:
1
2
3
4
|
var time1 = (timestart+
' 00:00:00'
).toString();
var time2 = (timeend+
' 23:59:59'
).toString();
timestart =
new
Date(Date.parse(str.replace(/-/g,
"/"
))).getTime();
timeend =
new
Date(Date.parse(str.replace(/-/g,
"/"
))).getTime();
|
主要的變化是對默認的日期格式進行了轉換, 基於'/'格式的日期字符串,纔是被各個瀏覽器所普遍支持的,‘-’鏈接的日期字符串,則是隻在chrome下能夠正常工做。
5. 知識點總結
'2015-05-04'是沒法被各個瀏覽器中,使用new Date(str)來正確生成日期對象的。 正確的用法是'2015/05/05'.