Safari Javascript Date () Numéro NaN (aaaa-MM-jj HH: mm: ss)

Mon code fonctionne correctement dans Google Chrome, mais pas dans Safari.

J’ai compris que je devais convertir yyyy-MM-dd HH:mm:ss en ISO 8601 , mais je n’ai pas trouvé de solution pour le faire.


Lien de test en ligne: http://jsfiddle.net/UVgHR/


Javascript:

 $(document).ready(function() { calculateMinutes(); setInterval(calculateMinutes, 60000); }); function calculateMinutes() { $('.calculateMinutes').each(function () { var diff = Math.abs(new Date( $(this).data('timestamp') ) - new Date()); var minutes = Math.floor((diff/1000)/60); $(this).html( minutes + ' min.' ); }); } 

Exemple HTML:

  

Pour faciliter votre question, votre problème est avec:

 new Date('2014-02-18 15:00:48') 

Cela fonctionne bien en chrome mais pas en safari. Le MDN parle du support du format ECMAScript 5 ISO-8601 :

Alternativement, la chaîne de date / heure peut être au format ISO 8601. Par exemple, “2011-10-10” (date seulement) ou “2011-10-10T14: 48: 00” (date et heure) peuvent être passés et analysés.

Si vous incluez T cela fonctionne:

 new Date('2014-02-18T15:00:48') 

Vous pouvez utiliser new Date('2014-02-18T15:00:48'.replace(/\s/, 'T')) .

Si vous traitez beaucoup de cas comme celui-ci, je vous recommanderai d’utiliser moment qui semble très bien gérer ce cas avec ou sans T: parsing syntaxique à partir de chaîne . De plus, votre exemple entier est plus facile avec momentjs:

 var minutes = moment().diff("2014-02-18 15:00:48", 'minutes'); 

Je pense que José a manqué un point ici – N’oubliez pas d’inclure Z sinon il y aura un décalage du fuseau horaire.

new Date (‘2014-02-18T15: 00: 48’) new Date (‘2014-02-18T15: 00: 48Z’)

Vous pouvez utiliser new Date('2014-02-18T15:00:48'.replace(/\s/, 'T')+'Z').

Reportez-vous à cela pour plus d’informations – new Date () fonctionne différemment dans Chrome et Firefox

J’ai déjà vu un problème comme celui-ci auparavant et ce qui fonctionne pour moi est de remplacer l’espace entre la date et l’heure par un T . Essaye ça:

JavaScript mis à jour:

 function calculateMinutes() { $('.calculateMinutes').each(function () { var timestamp = $(this).data('timestamp').replace(' ', 'T'); var diff = Math.abs(new Date(timestamp) - new Date()); var minutes = Math.floor((diff / 1000) / 60); $(this).html(minutes + ' min.'); }); } 

JSFiddle ici .