Comment puis-je obtenir le nombre de jours entre deux dates en JavaScript?

Comment puis-je obtenir le nombre de jours entre deux dates en JavaScript? Par exemple, deux dates dans les cases d'entrée:

<input id="first" value="1/1/2000"/>
<input id="second" value="1/1/2001"/>

<script>
  alert(datediff("day", first, second)); // what goes here?
</script>
308
demandé sur Michael Haren 2009-02-12 22:50:25
la source

30 ответов

Voici une rapide et sale la mise en œuvre de datediff , comme une preuve de concept pour résoudre le problème présenté dans la question. Il s'appuie sur le fait que vous pouvez obtenir les millisecondes écoulées entre deux dates en les soustrayant, ce qui les coerce dans leur valeur numérique primitive (millisecondes depuis le début de 1970).

// new Date("dateString") is browser-dependent and discouraged, so we'll write
// a simple parse function for U.S. date format (which does no error checking)
function parseDate(str) {
    var mdy = str.split('/');
    return new Date(mdy[2], mdy[0]-1, mdy[1]);
}

function datediff(first, second) {
    // Take the difference between the dates and divide by milliseconds per day.
    // Round to nearest whole number to deal with DST.
    return Math.round((second-first)/(1000*60*60*24));
}

alert(datediff(parseDate(first.value), parseDate(second.value)));
<input id="first" value="1/1/2000"/>
<input id="second" value="1/1/2001"/>

vous devez savoir que la Date "normale" APIs (sans "UTC" dans le nom) fonctionnent dans le fuseau horaire local du navigateur de l'utilisateur, donc en général, vous pouvez courir dans les problèmes si votre utilisateur est dans un fuseau horaire que vous n'attendez pas, et votre code devra traiter les transitions D'heure D'été. Vous devriez lire attentivement la documentation pour L'objet Date et ses méthodes, et pour quelque chose de plus compliqué, fortement envisager d'utiliser une bibliothèque qui offre des API plus sûres et puissantes pour la manipulation de date.

aussi, pour des fins d'illustration, l'extrait utilise accès nommé sur le window objet pour la brièveté, mais dans la production, vous devriez utiliser des API normalisées comme getElementById , ou plus probablement, certains Framework.

331
répondu Miles 2018-03-07 07:42:45
la source

à partir de cette écriture, une seule des autres réponses gère correctement les transitions DST (daylight saving time). Voici les résultats sur un système situé en Californie:

                                        1/1/2013- 3/10/2013- 11/3/2013-
User       Formula                      2/1/2013  3/11/2013  11/4/2013  Result
---------  ---------------------------  --------  ---------  ---------  ---------
Miles                   (d2 - d1) / N   31        0.9583333  1.0416666  Incorrect
some         Math.floor((d2 - d1) / N)  31        0          1          Incorrect
fuentesjr    Math.round((d2 - d1) / N)  31        1          1          Correct
toloco     Math.ceiling((d2 - d1) / N)  31        1          2          Incorrect

N = 86400000

bien que Math.round renvoie les bons résultats, je pense que c'est quelque peu grotesque. Au lieu de cela, en prenant explicitement en compte les changements de décalage UTC au début ou à la fin de la DST, nous pouvons utiliser l'arithmétique exacte:

function treatAsUTC(date) {
    var result = new Date(date);
    result.setMinutes(result.getMinutes() - result.getTimezoneOffset());
    return result;
}

function daysBetween(startDate, endDate) {
    var millisecondsPerDay = 24 * 60 * 60 * 1000;
    return (treatAsUTC(endDate) - treatAsUTC(startDate)) / millisecondsPerDay;
}

alert(daysBetween($('#first').val(), $('#second').val()));

explication

Les calculs de date JavaScript

sont compliqués parce que les objets Date stockent les heures en interne dans UTC, pas l'heure locale. Par exemple, 3/10/2013 12:00 Heure normale du Pacifique (UTC-08:00) est stocké comme 3/10/2013 8:00 UTC, et 3/11/2013 12:00 Heure avancée du Pacifique (UTC-07:00) est stocké comme 3/11/2013 7:00 UTC. Ce jour-là, de minuit à minuit, l'heure locale n'est que de 23 heures en UTC!

bien qu'une journée en heure locale puisse avoir plus ou moins 24 heures, une journée en UTC est toujours exactement 24 heures. 1 la méthode daysBetween ci-dessus profite de ce fait en appelant d'abord treatAsUTC pour ajuster les heures locales à minuit UTC, avant de soustraire et de diviser.

1. Le JavaScript ignore les secondes intercalaires.

183
répondu Michael Liu 2013-03-02 09:31:20
la source

la façon la plus facile d'obtenir la différence entre deux dates:

var diff =  Math.floor(( Date.parse(str2) - Date.parse(str1) ) / 86400000); 

vous obtenez la différence de jours (ou NaN si l'un ou les deux ne pouvaient pas être analysés). L'analyse date donne le résultat en millisecondes et de l'obtenir par jour, vous avez divisé par 24 * 60 * 60 * 1000

si vous le voulez divisé par jours, heures, minutes, secondes et millisecondes:

function dateDiff( str1, str2 ) {
    var diff = Date.parse( str2 ) - Date.parse( str1 ); 
    return isNaN( diff ) ? NaN : {
        diff : diff,
        ms : Math.floor( diff            % 1000 ),
        s  : Math.floor( diff /     1000 %   60 ),
        m  : Math.floor( diff /    60000 %   60 ),
        h  : Math.floor( diff /  3600000 %   24 ),
        d  : Math.floor( diff / 86400000        )
    };
}

voici ma version refactorisée de la version de James:

function mydiff(date1,date2,interval) {
    var second=1000, minute=second*60, hour=minute*60, day=hour*24, week=day*7;
    date1 = new Date(date1);
    date2 = new Date(date2);
    var timediff = date2 - date1;
    if (isNaN(timediff)) return NaN;
    switch (interval) {
        case "years": return date2.getFullYear() - date1.getFullYear();
        case "months": return (
            ( date2.getFullYear() * 12 + date2.getMonth() )
            -
            ( date1.getFullYear() * 12 + date1.getMonth() )
        );
        case "weeks"  : return Math.floor(timediff / week);
        case "days"   : return Math.floor(timediff / day); 
        case "hours"  : return Math.floor(timediff / hour); 
        case "minutes": return Math.floor(timediff / minute);
        case "seconds": return Math.floor(timediff / second);
        default: return undefined;
    }
}
105
répondu some 2009-02-13 05:56:33
la source

je recommande d'utiliser le moment.bibliothèque js ( ) http://momentjs.com/docs/#/displaying/difference / ). Il gère l'heure d'été correctement et, en général, est très agréable de travailler avec.

exemple:

var start = moment("2013-11-03");
var end = moment("2013-11-04");
end.diff(start, "days")
1
76
répondu stephenbez 2017-06-28 22:05:03
la source

je voudrais aller de l'avant et prenez ce petit utilitaire , et vous trouverez les fonctions de ce pour vous. Voici un bref exemple:

        <script type="text/javascript" src="date.js"></script>
        <script type="text/javascript">
            var minutes = 1000*60;
            var hours = minutes*60;
            var days = hours*24;

            var foo_date1 = getDateFromFormat("02/10/2009", "M/d/y");
            var foo_date2 = getDateFromFormat("02/12/2009", "M/d/y");

            var diff_date = Math.round((foo_date2 - foo_date1)/days);
            alert("Diff date is: " + diff_date );
        </script>
40
répondu fuentesjr 2009-02-12 23:50:41
la source

Utilisant Le Moment.js

var future = moment('05/02/2015');
var start = moment('04/23/2015');
var d = future.diff(start, 'days'); // 9
console.log(d);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.17.1/moment-with-locales.min.js"></script>
11
répondu Michael K 2017-06-10 12:10:26
la source

les valeurs de Date dans JS sont des valeurs de datetime.

ainsi, les calculs de date directs sont incohérents:

(2013-11-05 00:00:00) - (2013-11-04 10:10:10) < 1 day

par exemple, nous avons besoin de convertir de la 2e jour:

(2013-11-05 00:00:00) - (2013-11-04 00:00:00) = 1 day

la méthode pourrait tronquer les moulins dans les deux dates:

var date1 = new Date('2013/11/04 00:00:00');
var date2 = new Date('2013/11/04 10:10:10'); //less than 1
var start = Math.floor(date1.getTime() / (3600 * 24 * 1000)); //days as integer from..
var end = Math.floor(date2.getTime() / (3600 * 24 * 1000)); //days as integer from..
var daysDiff = end - start; // exact dates
console.log(daysDiff);

date2 = new Date('2013/11/05 00:00:00'); //1

var start = Math.floor(date1.getTime() / (3600 * 24 * 1000)); //days as integer from..
var end = Math.floor(date2.getTime() / (3600 * 24 * 1000)); //days as integer from..
var daysDiff = end - start; // exact dates
console.log(daysDiff);
9
répondu Norris 2017-06-10 11:32:11
la source

pour calculer les jours entre 2 dates données, vous pouvez utiliser le code suivant.Les Dates que j'utilise ici sont Jan 01 2016 et Dec 31 2016

var day_start = new Date("Jan 01 2016");
var day_end = new Date("Dec 31 2016");
var total_days = (day_end - day_start) / (1000 * 60 * 60 * 24);
document.getElementById("demo").innerHTML = Math.round(total_days);
<h3>DAYS BETWEEN GIVEN DATES</h3>
<p id="demo"></p>
8
répondu NooNa MarJa 2017-04-07 14:42:41
la source

mieux vaut se débarrasser de DST, Math.ceil, les maths.le sol etc. en utilisant UTC times:

var firstDate = Date.UTC(2015,01,2);
var secondDate = Date.UTC(2015,04,22);
var diff = Math.abs((firstDate.valueOf() 
    - secondDate.valueOf())/(24*60*60*1000));

cet exemple donne une différence de 109 jours. 24*60*60*1000 est un jour en millisecondes.

7
répondu Timo Kähkönen 2015-04-30 10:58:39
la source

Qu'en est-il de l'utilisation de formatDate à partir de widget DatePicker? Vous pouvez l'utiliser pour convertir les dates au format timestamp (millisecondes depuis le 01/01/1970) et ensuite faire une simple soustraction.

6
répondu kgiannakakis 2009-02-12 23:16:23
la source

j'ai trouvé cette question quand je veux faire quelques calculs sur deux dates, mais la date ont des heures et des minutes de valeur, j'ai modifié la réponse de @michael-liu pour correspondre à mon exigence, et il a réussi mon test.

diff jours 2012-12-31 23:00 et 2013-01-01 01:00 doit être égale à 1. (2 heures) les jours 2012-12-31 01:00 et 2013-01-01 23:00 doivent être égaux à 1. (46 heures)

function treatAsUTC(date) {
    var result = new Date(date);
    result.setMinutes(result.getMinutes() - result.getTimezoneOffset());
    return result;
}

var millisecondsPerDay = 24 * 60 * 60 * 1000;
function diffDays(startDate, endDate) {
    return Math.floor(treatAsUTC(endDate) / millisecondsPerDay) - Math.floor(treatAsUTC(startDate) / millisecondsPerDay);
}
6
répondu guilin 桂林 2013-03-27 16:01:58
la source

je pense que les solutions ne sont pas correctes 100% j'utiliserais ceil au lieu de plancher , rond fonctionnera mais ce n'est pas la bonne opération.

function dateDiff(str1, str2){
    var diff = Date.parse(str2) - Date.parse(str1); 
    return isNaN(diff) ? NaN : {
        diff: diff,
        ms: Math.ceil(diff % 1000),
        s: Math.ceil(diff / 1000 % 60),
        m: Math.ceil(diff / 60000 % 60),
        h: Math.ceil(diff / 3600000 % 24),
        d: Math.ceil(diff / 86400000)
    };
}
6
répondu Tolo Palmer 2017-02-18 16:53:02
la source

il est possible de calculer une différence de jours de preuve complète entre deux dates reposant sur des ZT différentes en utilisant la formule suivante:

var start = new Date('10/3/2015');
var end = new Date('11/2/2015');
var days = (end - start) / 1000 / 60 / 60 / 24;
console.log(days);
// actually its 30 ; but due to daylight savings will show 31.0xxx
// which you need to offset as below
days = days - (end.getTimezoneOffset() - start.getTimezoneOffset()) / (60 * 24);
console.log(days);
6
répondu riv 2017-04-07 14:43:07
la source
var start= $("#firstDate").datepicker("getDate");
var end= $("#SecondDate").datepicker("getDate");
var days = (end- start) / (1000 * 60 * 60 * 24);
 alert(Math.round(days));

jsfiddle exemple:)

5
répondu Aravindh Gopi 2016-11-21 15:38:30
la source

Être prudent lors de l' à l'aide de millisecondes .

la date .getTime () retourne millisecondes et faire opération mathématique avec millisecondes nécessite d'inclure

  • heure d'été (HNE)
  • vérification si les deux dates ont la même heure (Heures, minutes, secondes, millisecondes)
  • s'assurer quel comportement des jours différence requise: 19 septembre 2016-29 septembre 2016 = 1 ou 2 jours de différence?

L'exemple du commentaire ci-dessus est la meilleure solution que j'ai trouvé jusqu'à présent https://stackoverflow.com/a/11252167/2091095 . Mais utilisez +1 à son résultat si vous voulez compter tous les jours impliqués.

function treatAsUTC(date) {
    var result = new Date(date);
    result.setMinutes(result.getMinutes() - result.getTimezoneOffset());
    return result;
}

function daysBetween(startDate, endDate) {
    var millisecondsPerDay = 24 * 60 * 60 * 1000;
    return (treatAsUTC(endDate) - treatAsUTC(startDate)) / millisecondsPerDay;
}

var diff = daysBetween($('#first').val(), $('#second').val()) + 1;
4
répondu Dalibor Matura 2017-05-23 14:54:59
la source

function timeDifference(date1, date2) {
  var oneDay = 24 * 60 * 60; // hours*minutes*seconds
  var oneHour = 60 * 60; // minutes*seconds
  var oneMinute = 60; // 60 seconds
  var firstDate = date1.getTime(); // convert to milliseconds
  var secondDate = date2.getTime(); // convert to milliseconds
  var seconds = Math.round(Math.abs(firstDate - secondDate) / 1000); //calculate the diffrence in seconds
  // the difference object
  var difference = {
    "days": 0,
    "hours": 0,
    "minutes": 0,
    "seconds": 0,
  }
  //calculate all the days and substract it from the total
  while (seconds >= oneDay) {
    difference.days++;
    seconds -= oneDay;
  }
  //calculate all the remaining hours then substract it from the total
  while (seconds >= oneHour) {
    difference.hours++;
    seconds -= oneHour;
  }
  //calculate all the remaining minutes then substract it from the total 
  while (seconds >= oneMinute) {
    difference.minutes++;
    seconds -= oneMinute;
  }
  //the remaining seconds :
  difference.seconds = seconds;
  //return the difference object
  return difference;
}
console.log(timeDifference(new Date(2017,0,1,0,0,0),new Date()));
4
répondu N.Belhadj 2017-04-07 14:46:46
la source

Date.prototype.days = function(to) {
  return Math.abs(Math.floor(to.getTime() / (3600 * 24 * 1000)) - Math.floor(this.getTime() / (3600 * 24 * 1000)))
}


console.log(new Date('2014/05/20').days(new Date('2014/05/23'))); // 3 days

console.log(new Date('2014/05/23').days(new Date('2014/05/20'))); // 3 days
4
répondu Abdennour TOUMI 2017-06-10 10:49:04
la source

ce n'est peut-être pas la solution la plus élégante, mais il semble répondre à la question avec un peu de code relativement simple, je pense. Ne pouvez-vous pas utiliser quelque chose comme ceci:

function dayDiff(startdate, enddate) {
  var dayCount = 0;

  while(enddate >= startdate) {
    dayCount++;
    startdate.setDate(startdate.getDate() + 1);
  }

return dayCount; 
}

ceci suppose que vous passez des objets date comme paramètres.

3
répondu Popmatic 2015-04-02 23:59:46
la source

j'ai eu le même problème en angle. Je fais la copie, sinon il écrira le premier rendez-vous. Les deux dates doivent avoir l'Heure 00:00: 00 (évidemment)

 /*
* Deze functie gebruiken we om het aantal dagen te bereken van een booking.
* */
$scope.berekenDagen = function ()
{
    $scope.booking.aantalDagen=0;

    /*De loper is gelijk aan de startdag van je reservatie.
     * De copy is nodig anders overschijft angular de booking.van.
     * */
    var loper = angular.copy($scope.booking.van);

    /*Zolang de reservatie beschikbaar is, doorloop de weekdagen van je start tot einddatum.*/
    while (loper < $scope.booking.tot) {
        /*Tel een dag op bij je loper.*/
        loper.setDate(loper.getDate() + 1);
        $scope.booking.aantalDagen++;
    }

    /*Start datum telt natuurlijk ook mee*/
    $scope.booking.aantalDagen++;
    $scope.infomsg +=" aantal dagen: "+$scope.booking.aantalDagen;
};
3
répondu user3806549 2015-07-02 12:08:14
la source

si vous avez deux horodateurs unix, vous pouvez utiliser cette fonction (rendue un peu plus verbeuse par souci de clarté):

// Calculate number of days between two unix timestamps
// ------------------------------------------------------------
var daysBetween = function(timeStampA, timeStampB) {
    var oneDay = 24 * 60 * 60 * 1000; // hours * minutes * seconds * milliseconds
    var firstDate = new Date(timeStampA * 1000);
    var secondDate = new Date(timeStampB * 1000);
    var diffDays = Math.round(Math.abs((firstDate.getTime() - secondDate.getTime())/(oneDay)));
    return diffDays;
};

exemple:

daysBetween(1096580303, 1308713220); // 2455
3
répondu Wallace Sidhrée 2015-12-16 19:56:23
la source

j'ai utilisé le code ci-dessous pour expérimenter la fonctionnalité de date de publication pour un post de nouvelles.Je calcule la minute ou l'heure ou le jour ou l'année en fonction de la date d'affichage et de la date courante.

var startDate= new Date("Mon Jan 01 2007 11:00:00");
var endDate  =new Date("Tue Jan 02 2007 12:50:00");
var timeStart = startDate.getTime();
var timeEnd = endDate.getTime();
var yearStart = startDate.getFullYear();
var yearEnd   = endDate.getFullYear();
if(yearStart == yearEnd)
 {
  var hourDiff = timeEnd - timeStart; 
  var secDiff = hourDiff / 1000;
  var minDiff = hourDiff / 60 / 1000; 
  var hDiff = hourDiff / 3600 / 1000; 
  var myObj = {};
  myObj.hours = Math.floor(hDiff);
  myObj.minutes = minDiff  
  if(myObj.hours >= 24)
   {
    console.log(Math.floor(myObj.hours/24) + "day(s) ago")
   } 
 else if(myObj.hours>0)
  {
   console.log(myObj.hours +"hour(s) ago")
  }
 else
  {
   console.log(Math.abs(myObj.minutes) +"minute(s) ago")
  }
}
else
{
var yearDiff = yearEnd - yearStart;
console.log( yearDiff +" year(s) ago");
}
3
répondu Ramees Rahath 2016-07-22 19:04:21
la source

si vous voulez avoir une DateArray avec des dates essayez ceci:

<script>
        function getDates(startDate, stopDate) {
        var dateArray = new Array();
        var currentDate = moment(startDate);
        dateArray.push( moment(currentDate).format('L'));

        var stopDate = moment(stopDate);
        while (dateArray[dateArray.length -1] != stopDate._i) {
            dateArray.push( moment(currentDate).format('L'));
            currentDate = moment(currentDate).add(1, 'days');
        }
        return dateArray;
      }
</script>

DebugSnippet

3
répondu Ricardo Fercher 2016-09-07 17:02:38
la source

la façon simple de calculer les jours entre deux dates est de supprimer les deux composantes de temps, c'est-à-dire de fixer les heures, les minutes, les secondes et les millisecondes à 0, puis de soustraire leur temps et de le plonger avec une valeur de millisecondes d'une journée.

var firstDate= new Date(firstDate.setHours(0,0,0,0));
var secondDate= new Date(secondDate.setHours(0,0,0,0));
var timeDiff = firstDate.getTime() - secondDate.getTime();
var diffDays =timeDiff / (1000 * 3600 * 24);
3
répondu Sriman Pathy 2017-09-19 08:50:41
la source
const startDate = '2017-11-08';
const endDate   = '2017-10-01';
const timeDiff  = (new Date(startDate)) - (new Date(endDate));
const days      = timeDiff / (1000 * 60 * 60 * 24)
  1. Set date de début
  2. Date de fin de série
  3. calculer la différence
  4. convertir millisecondes en jours
3
répondu marcobiedermann 2017-11-08 16:34:39
la source
function formatDate(seconds, dictionary) {
    var foo = new Date;
    var unixtime_ms = foo.getTime();
    var unixtime = parseInt(unixtime_ms / 1000);
    var diff = unixtime - seconds;
    var display_date;
    if (diff <= 0) {
        display_date = dictionary.now;
    } else if (diff < 60) {
        if (diff == 1) {
            display_date = diff + ' ' + dictionary.second;
        } else {
            display_date = diff + ' ' + dictionary.seconds;
        }
    } else if (diff < 3540) {
        diff = Math.round(diff / 60);
        if (diff == 1) {
            display_date = diff + ' ' + dictionary.minute;
        } else {
            display_date = diff + ' ' + dictionary.minutes;
        }
    } else if (diff < 82800) {
        diff = Math.round(diff / 3600);
        if (diff == 1) {
            display_date = diff + ' ' + dictionary.hour;
        } else {
            display_date = diff + ' ' + dictionary.hours;
        }
    } else {
        diff = Math.round(diff / 86400);
        if (diff == 1) {
            display_date = diff + ' ' + dictionary.day;
        } else {
            display_date = diff + ' ' + dictionary.days;
        }
    }
    return display_date;
}
2
répondu zloctb 2017-02-18 08:28:44
la source

une meilleure Solution pour

en Ignorant le temps de la partie

il sera de retour 0 si les deux dates sont identiques.

function dayDiff(firstDate, secondDate) {
  firstDate = new Date(firstDate);
  secondDate = new Date(secondDate);
  if (!isNaN(firstDate) && !isNaN(secondDate)) {
    firstDate.setHours(0, 0, 0, 0); //ignore time part
    secondDate.setHours(0, 0, 0, 0); //ignore time part
    var dayDiff = secondDate - firstDate;
    dayDiff = dayDiff / 86400000; // divide by milisec in one day
    console.log(dayDiff);
  } else {
    console.log("Enter valid date.");
  }
}

$(document).ready(function() {
  $('input[type=datetime]').datepicker({
    dateFormat: "mm/dd/yy",
    changeMonth: true,
    changeYear: true
  });
  $("#button").click(function() {
    dayDiff($('#first').val(), $('#second').val());
  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
<script src="//code.jquery.com/ui/1.12.1/jquery-ui.js"></script>

<input type="datetime" id="first" value="12/28/2016" />
<input type="datetime" id="second" value="12/28/2017" />
<input type="button" id="button" value="Calculate">
1
répondu Sumit Joshi 2017-09-29 09:59:30
la source
   function validateDate() {
        // get dates from input fields
        var startDate = $("#startDate").val();
        var endDate = $("#endDate").val();
        var sdate = startDate.split("-");
        var edate = endDate.split("-");
        var diffd = (edate[2] - sdate[2]) + 1;
        var leap = [ 0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 ];
        var nonleap = [ 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 ];
        if (sdate[0] > edate[0]) {
            alert("Please enter End Date Year greater than Start Date Year");
            document.getElementById("endDate").value = "";
            diffd = "";
        } else if (sdate[1] > edate[1]) {
            alert("Please enter End Date month greater than Start Date month");
            document.getElementById("endDate").value = "";
            diffd = "";
        } else if (sdate[2] > edate[2]) {
            alert("Please enter End Date greater than Start Date");
            document.getElementById("endDate").value = "";
            diffd = "";
        } else {
            if (sdate[0] / 4 == 0) {
                while (sdate[1] < edate[1]) {
                    diffd = diffd + leap[sdate[1]++];
                }
            } else {
                while (sdate[1] < edate[1]) {
                    diffd = diffd + nonleap[sdate[1]++];
                }
            }
            document.getElementById("numberOfDays").value = diffd;
        }
    }
0
répondu Parmanand Shete 2016-02-02 16:08:47
la source

vous pouvez utiliser des sous-titres pour formater et calculer la différence.

Demo https://jsfiddle.net/sumitridhal/8sv94msp /

 var startDate = moment("2016-08-29T23:35:01");
var endDate = moment("2016-08-30T23:35:01");  
  

console.log(startDate);
console.log(endDate);

var resultHours = endDate.diff(startDate, 'hours', true);

document.body.innerHTML = "";
document.body.appendChild(document.createTextNode(resultHours));
body { white-space: pre; font-family: monospace; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.5.1/moment.min.js"></script>
0
répondu Sumit Ridhal 2017-05-04 15:12:09
la source

Bookmarklet la version des autres réponses, vous invitant pour les deux dates:

javascript:(function() {
    var d = new Date(prompt("First Date or leave blank for today?") || Date.now());
    prompt("Days Between", Math.round(
        Math.abs(
            (d.getTime() - new Date(prompt("Date 2")).getTime())
                /(24*60*60*1000)
             )
        ));
})();
0
répondu drzaus 2017-07-25 23:40:28
la source

Voici une réponse affichée à l'origine à https://stackoverflow.com/a/1968175/3787376 .

La méthode inclut une fonction utile que j'ai créée pour séparer la différence en unités de temps.

en utilisant l'objet Date et sa valeur en millisecondes, les différences peuvent être calculées:

var a = new Date(); // Current date now.
var b = new Date(2010, 0, 1, 0, 0, 0, 0); // Start of 2010.
var d = (b-a); // Difference in milliseconds.

Vous pouvez obtenir le nombre de secondes (en entier/nombre entier) en divisant le millisecondes par 1000 pour convertir en secondes puis en convertissant le résultat d'un entier (ce qui supprime la partie décimale représentant les millisecondes):

var seconds = parseInt((b-a)/1000);

vous pourriez alors obtenir entier minutes en divisant seconds par 60 et en le convertissant en un entier, puis hours en divisant minutes par 60 et en le convertissant en un entier, puis des unités de temps plus longues de la même manière. De ceci, une fonction pour obtenir le montant total maximum d'une unité de temps dans la valeur d'une unité inférieure et le reste unité inférieure peuvent être créés:

function get_whole_values(base_value, time_fractions) {
    time_data = [base_value];
    for (i = 0; i < time_fractions.length; i++) {
        time_data.push(parseInt(time_data[i]/time_fractions[i]));
        time_data[i] = time_data[i] % time_fractions[i];
    }; return time_data;
};
// Input variables below: starting value of 72000 milliseconds, time fractions are
// 1000 (amount of milliseconds in a second) and 60 (amount of seconds in a minute). 
console.log(get_whole_values(72000, [1000, 60]));
// -> [0,12,1] # 0 whole milliseconds, 12 whole seconds, 1 whole minute.

les options d'entrée fournies ci-dessus pour le deuxième Date object utiliser le format suivant:

new Date(<year>, <month>, <day>, <hours>, <minutes>, <seconds>, <milliseconds>);

comme les commentaires de cette solution l'ont fait remarquer à l'origine, vous n'avez pas besoin de fournir toutes ces valeurs à moins qu'elles ne soient nécessaires pour la date que vous créez.

0
répondu Edward 2017-10-02 18:54:43
la source

Autres questions sur