2010-12-14 6 views
8

J'ai regardé: Get difference between 2 dates in javascript?javascript différence Date

Et je ne peux toujours pas obtenir ce travail.

var difference = data.List[0].EndDate - Math.round(new Date().getTime()/1000.0) * 1000; 
var daysRemaining = Math.floor(difference/1000/60/60/24); 
var hoursRemaining = Math.floor(difference/1000/60/60 - (24 * daysRemaining)); 
var minutesRemaining = Math.floor(difference/1000/60 - (24 * 60 * daysRemaining) - (60 * hoursRemaining)); 
var secondsRemaining = Math.floor(difference/1000 - (24 * 60 * 60 * daysRemaining) - (60 * 60 * hoursRemaining) - (60 * minutesRemaining)); 

Data.List [0] .EndDate est un nombre UTC (comme: 1291427809310 (http://www.epochconverter.com/)) qui sera toujours plus tard à la date actuelle.

+0

qu'est-ce que vous attendez de la sortie? –

+0

pour avoir les bonnes heures, minutes et secondes restantes. – williamparry

+1

Qu'est-ce que "je n'arrive pas à faire fonctionner" signifie exactement? – epascarello

Répondre

5

Vous dites que l'horodatage UTC est "2004-09-16T23: 59: 58.75"?

Alors vous faites essentiellement

var x = "2004-09-16T23:59:58.75" - 123456 

Maintenant que vous avez précisé que, que le ne s'applique pas ci-dessus. Votre nouveau problème est le nombre de millisecondes dans le passé, donc quand vous faites le calcul de la différence, vous obtenez un nombre négatif. Vous voulez probablement échanger la commande.

var difference = new Date().getTime()-data.List[0].EndDate; 
+0

désolé mon mauvais, c'est un nombre comme 1291427809310 – williamparry

+0

Ajout de nouvelles informations basées sur ce que vous avez dit dans le commentaire – epascarello

3

Si EndDate est en millisecondes, et getTime() retourne millisecondes, pourquoi répartissez-vous par 1000 seulement pour multiplier par 1000 dans la même ligne? Et si vous n'avez besoin que d'une seconde précision pour tout le reste du code, pourquoi travailler en millisecondes? Commencez avec un certain nombre de secondes pour simplifier tous vos calculs:

var difference = Math.round((data.List[0].EndDate - new Date().getTime())/1000); 
11
function days_between(date1, date2) { 

    // The number of milliseconds in one day 
    var ONE_DAY = 1000 * 60 * 60 * 24 

    // Convert both dates to milliseconds 
    var date1_ms = date1.getTime() 
    var date2_ms = date2.getTime() 

    // Calculate the difference in milliseconds 
    var difference_ms = Math.abs(date1_ms - date2_ms) 

    // Convert back to days and return 
    return Math.round(difference_ms/ONE_DAY) 

} 

http://www.mcfedries.com/javascript/daysbetween.asp

+6

Cela ne prend pas en compte les cas où date1 et date2 traversent un événement de changement d'économie de lumière du jour. Voir http://stackoverflow.com/a/15289883/850996 –

+0

Dans quel format dois-je passer la date? – nirav

0

j'ai écrit un component qui fait exactement cela si vous ne voulez pas utiliser une librar complète y comme moment.js. Il peut également afficher la différence dans n'importe quelle unité de temps dont vous avez besoin (jours, semaines, mois, minutes, heures, etc.).

Voilà comment cela fonctionnerait:

var date1 = date.getTime(); 
var date2 = data.List[0].EndDate; 

var millisecondsRemaining = dateDiff(date1, date2, 'milliseconds'); 
var secondsRemaining = dateDiff(date1, date2, 'seconds'); 
var minutesRemaining = dateDiff(date1, date2, 'minutes'); 
var hoursRemaining = dateDiff(date1, date2, 'hours'); 
var daysRemaining = dateDiff(date1, date2, 'days'); 
var weeksRemaining = dateDiff(date1, date2, 'weeks'); 
var monthsRemaining = dateDiff(date1, date2, 'months'); 
var yearsRemaining = dateDiff(date1, date2, 'years'); 

Pour utiliser la méthode DATEDIFF() vous pouvez simplement importer le composant.