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 .