我一直在Date原型上使用一些擴展來執行一些操作(建議:不要這樣做,它會使日期對象失效;對於我而言,我當前的項目太晚了),最近一直有比平常更多的問題。Javascript沒有正確解析日期
爲H中解析字符串:M格式,我做了一個自定義函數,並將其分配到日期原型是這樣的:
Date.__parse = Date.parse;
Date.parse = function(string){
var pattern = /^\d{1,2}:\d{1,2}/ig;
var today = new Date();
if (pattern.exec(string)){
var year = today.getFullYear();
var month = today.getMonth()+1;
var day = today.getDate();
var t = year+"-"+month+"-"+day+" "+string;
var timestamp = Date.__parse(t);
return new Date(timestamp);
}
else{
return new Date(Date.__parse(string));
}
}
醜陋當你嘗試登錄的日期對象,但工作直到最近。
有一段時間,Date.parse似乎與「d-m-Y」格式的日期一起工作,但最近它在我做它時返回「無效日期」。
在主要瀏覽器解析日期或對規格進行某些更改的方式上做了某些更改,或者我必須假定錯誤出現之前,並且它沒有觸發「無效日期」,因爲我很幸運? (我主要使用函數來驗證輸入字段,所以它可能很容易被忽視)。
猜測我將不得不編寫自己的日期腳本,完全忘記了js Date對象,它非常可怕(試圖使用moment.js,但是在使用它的組件中的性能非常差,這就是爲什麼我必須自定義功能)。
編輯
爲了更好的理解;
我在做什麼,似乎工作:
Date.parse("23-7-2016") // Never got an error, expected 23 Jul 2016
我跟蹤驗證錯誤之後發現了什麼:
var startDate = Date.parse("23-7-2016");
console.log(startDate.toISOString()); //Got Invalid Date
我覺得可能已經發生
var startDate = Date.parse("12-7-2016");
// expected 12 Jul 2016, got 7 Dec 2016, silently fails, everyone is happy
爲什麼我認爲上一個。情況並非如此:我使用交互式調度程序並對其執行了數千次測試,幾乎不會忽略這樣的錯誤。
最糟糕的情況:chrome更新並更改了它分析日期的方式。
不知道......希望有人能啓發我。
你可以給你提供這個功能值一些輸入的例子嗎?另外一個普遍的問題 - 爲什麼你要將日期轉換爲字符串,反之亦然?是因爲你從某個外部來源得到日期字符串,還是你做了客戶端 - 服務器通信? –
我認爲你應該使用pattern.test根據你的例子而不是pattern.exec –
對不起,但是這個例子太廣泛了。我爲它所做的主要用途是一個事件調度程序,可以將其視爲月曆,一週時間表或每日時間表。例如,在周視圖中,我必須循環周幾,然後超過幾個小時來勾選事件並稍後繪製它們。部分功能是添加事件,因此,當它迭代日期時,我必須將它們轉換爲可讀的本地化字符串(我不會發布大量文本分析器),反之亦然。當點擊一天時,它必須存儲日期值......等等。 – sergio0983