2016-08-19 79 views
3

我無法解析我網站的日期。它曾在IE和Chrome上正常工作(我還沒有試過Firefox)。但最近我一直無法解析鉻的日期。Chrome無法解析日期,但IE瀏覽器可以

日期字符串這是我從數據庫中獲取看起來像這樣「二○一六年十月一十七日12:00 AM」

這裏是我使用調試我的問題的代碼

console.log("String = "+item.DueDate); 
console.log("new Date = " + new Date(item.DueDate)); 
console.log("Date Parse = " + Date.parse(item.DueDate)); 
console.log("Moment Parse = " + moment(item.DueDate)); 

這裏什麼是IE返回:

字符串= 2016年10月17日12:00 AM
新日期=星期一2016年10月17日00:00:00 GMT-0400(東部夏令時間)
日期解析= 1476676800000
瞬間解析= 1476676800000

而且這裏是由Chrome瀏覽器返回:

字符串= 2016年10月17日12:00 AM
新日期=無效的日期
Date Parse = NaN
Moment Parse = NaN

我在查找到日期之間的差值我的函數的一個使用Date.parse():

function daydiff(first, second) { 
    return Math.round((second - first)/(1000 * 60 * 60 * 24)); 
} 

var dif = daydiff(Date.parse(item.DueDate), Date.parse(item.DateShipped)); 

我應該怎麼做我的日期字符串,以便它與Chrome和Internet Explorer上工作?

固定

所以我改變我的網絡API調用返回一個DateTime,而不是字符串固定它。

+0

是日期被存儲爲一個字符串或整數? –

+0

它作爲一個字符串存儲在數據庫中。 – Mark

+5

解析值時,常見的瀏覽器問題很常見。你最好的選擇是使用像時刻的圖書館。js進行解析,它將大部分(如果不是全部的話)瀏覽器變量考慮在內。而且,這並不是您希望您的日期時間看起來像來自服務器的樣子。您可能想要改進它們的存儲方式。 – QBM5

回答

2

永遠不要使用Date構造函數解析字符串(或Date.parse,它們等價於解析),因爲它幾乎完全依賴於實現。即使在ECMA-262中指定的格式也不能被所有正在使用的瀏覽器可靠地解析。

使用定製函數或提供解析和格式化的庫,並始終將格式傳遞給解析器。合適的文庫是moment.js,date.jsfecha.js,但還有許多其他的文庫。

定製的功能可能看起來像:

function parseSpecia(s) { 
 
    var months = {jan:0,feb:1,mar:2,apr:3,may:4,jun:5,jul:6,aug:7,sep:8,oct:9,nov:10,dec:11}; 
 
    var h; 
 
    if (/a[mp]$/i.test(s)) { 
 
     h = /am$/i.test(s)? 0 : 12; 
 
     s = s.replace(/a[mp]$/i,''); 
 
    } 
 
    var b = s.split(/[ :]/) 
 
    return new Date(b[2], months[b[0].toLowerCase().substr(0,3)], b[1],(b[3]%12)+h, b[4]); 
 
} 
 

 
var s = 'Oct 17 2016 12:00AM'; 
 
console.log(parseSpecia(s));

而使用圖書館將如下所示:

fecha.parse('Oct 17 2016 12:00AM','MMM DD YYYY hh:mm:zz'); 
相關問題