Chrome ne peut pas analyser la date, mais IE peut

J'ai du mal à analyser les dates de mon site. Il fonctionnait bien sur IE et Chrome (je n'ai pas encore essayé Firefox). Mais récemment, j'ai été incapable d'analyser les dates sur chrome.

La chaîne de date que j'obtiens de la base de données ressemble à ceci "17 oct 2016 12:00 AM"

Voici le code que j'utilise pour déboguer mon problème

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)); 

Voici ce qui est retourné par IE:

Chaîne = 17 octobre 2016 12h00
Nouveau Date = lundi 17 octobre 2016 00:00:00 GMT-0400 (heure avancée de l'Est)
Date Parse = 1476676800000
Moment Parse = 1476676800000

Et voici ce qui est retourné par Chrome:

Chaîne = 17 octobre 2016 12h00
Nouvelle Date = Date invalide
Date Parse = NaN
Moment Parse = NaN

J'utilise Date.parse () dans l'une de mes fonctions qui trouve la différence entre les dates:

 function daydiff(first, second) { return Math.round((second - first) / (1000 * 60 * 60 * 24)); } var dif = daydiff(Date.parse(item.DueDate), Date.parse(item.DateShipped)); 

Que dois-je faire pour ma chaîne de dates afin qu'elle fonctionne avec Chrome Chrome et Internet Explorer?

Fixé

Je l'ai donc corrigé en changeant mon appel Web api pour retourner un DateTime plutôt que de chaîne.

Ne jamais analyser les chaînes avec le constructeur Date (ou Date.parse, elles sont équivalentes pour l'analyse) car elle dépend presque entièrement de l'implémentation. Même le format unique spécifié dans ECMA-262 n'est pas analysé de manière fiable par tous les navigateurs utilisés.

Utilisez une fonction sur mesure ou une bibliothèque qui fournit l'analyse et le formatage et passe toujours le format pour analyser l'analyseur. Les bibliothèques appropriées sont moment.js , date.js et fecha.js , mais il y en a beaucoup d'autres.

Une fonction sur mesure pourrait ressembler à:

 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));