Vous obtenez la différence entre 2 dates en JavaScript? [dupliquer]

cette question a déjà une réponse ici:

  • Comment puis-je obtenir le nombre de jours entre deux dates en JavaScript? 33 réponses

Comment puis-je obtenir la différence entre 2 dates en jours entiers (Je ne veux pas de fractions d'un jour)

var date1 = new Date('7/11/2010');
var date2 = new Date('12/12/2010');
var diffDays = date2.getDate() - date1.getDate(); 
alert(diffDays)

j'ai essayé ci-dessus, mais cela ne fonctionne pas.

373
demandé sur Brett DeWoody 2010-07-12 02:19:54

7 réponses

Voici une façon de :

var date1 = new Date("7/13/2010");
var date2 = new Date("12/15/2010");
var timeDiff = Math.abs(date2.getTime() - date1.getTime());
var diffDays = Math.ceil(timeDiff / (1000 * 3600 * 24)); 
alert(diffDays);

remarquez qu'il faut inclure la date entre guillemets. Le reste du code obtient le décalage horaire en millisecondes puis se divise pour obtenir le nombre de jours. Date prévue format mm/JJ / AAAA.

578
répondu TNi 2016-02-15 19:04:29

une solution plus correcte

... étant donné que les dates ont naturellement des informations sur les fuseaux horaires, qui peuvent couvrir des régions avec différents réglages d'économie de lumière de jour

les réponses précédentes à cette question ne tiennent pas compte des cas où les deux dates en question couvrent un changement d'heure d'été. La date à laquelle le changement de DST se produit aura une durée en millisecondes qui est != 1000*60*60*24 , de sorte que le type calcul échoue.

vous pouvez contourner cela en normalisant d'abord les deux dates de TUC, puis en calculant la différence entre ces deux dates de TUC.

maintenant, la solution peut être écrite comme,

const _MS_PER_DAY = 1000 * 60 * 60 * 24;

// a and b are javascript Date objects
function dateDiffInDays(a, b) {
  // Discard the time and time-zone information.
  const utc1 = Date.UTC(a.getFullYear(), a.getMonth(), a.getDate());
  const utc2 = Date.UTC(b.getFullYear(), b.getMonth(), b.getDate());

  return Math.floor((utc2 - utc1) / _MS_PER_DAY);
}

// test it
const a = new Date("2017-01-01"),
    b = new Date("2017-07-25"),
    difference = dateDiffInDays(a, b);

cela fonctionne parce que le temps UTC n'observe jamais DST. Voir L'UTC observe-t-il l'heure d'été?

p. S. Après avoir discuté de certains des commentaires réponse, une fois que vous avez compris les problèmes avec les dates javascript qui couvrent une frontière DST, il y a probablement plus d'une façon de le résoudre. Ce que j'ai fourni ci-dessus est une solution simple (et testée). Je serais intéressé de savoir s'il y a une solution arithmétique simple/mathématique basée au lieu d'avoir à instancier les deux nouveaux objets Date. Qui pourrait être plus rapide.

567
répondu Shyam Habarakada 2018-07-24 21:09:32

Voici une solution utilisant le moment .js :

var a = moment('7/11/2010','M/D/YYYY');
var b = moment('12/12/2010','M/D/YYYY');
var diffDays = b.diff(a, 'days');
alert(diffDays);

j'ai utilisé vos valeurs initiales, mais vous n'avez pas spécifié le format, donc j'ai supposé que la première valeur était le 11 juillet. Si c'était prévu pour le 7 Novembre, alors ajuster le format à D/M/YYYY à la place.

59
répondu Matt Johnson 2013-09-07 17:27:34
var date1 = new Date("7/11/2010");
var date2 = new Date("8/11/2010");
var diffDays = parseInt((date2 - date1) / (1000 * 60 * 60 * 24)); 

alert(diffDays )
20
répondu volkan er 2010-07-11 22:27:31

j'ai essayé de nombreuses façons, et j'ai trouvé que l'utilisation de datepicker était la meilleure, mais le format date provoque des problèmes avec JavaScript....

donc voici ma réponse et peut être sorti de la boîte.

<input type="text" id="startdate">
<input type="text" id="enddate">
<input type="text" id="days">

<script src="https://code.jquery.com/jquery-1.8.3.js"></script>
<script src="https://code.jquery.com/ui/1.10.0/jquery-ui.js"></script>
<link rel="stylesheet" href="http://code.jquery.com/ui/1.10.3/themes/redmond/jquery-ui.css" />
<script>
$(document).ready(function() {

$( "#startdate,#enddate" ).datepicker({
changeMonth: true,
changeYear: true,
firstDay: 1,
dateFormat: 'dd/mm/yy',
})

$( "#startdate" ).datepicker({ dateFormat: 'dd-mm-yy' });
$( "#enddate" ).datepicker({ dateFormat: 'dd-mm-yy' });

$('#enddate').change(function() {
var start = $('#startdate').datepicker('getDate');
var end   = $('#enddate').datepicker('getDate');

if (start<end) {
var days   = (end - start)/1000/60/60/24;
$('#days').val(days);
}
else {
alert ("You cant come back before you have been!");
$('#startdate').val("");
$('#enddate').val("");
$('#days').val("");
}
}); //end change function
}); //end ready
</script>

un violon peut être vu ici DEMO

9
répondu Mikeys4u 2016-05-12 14:31:32

c'est le code pour soustraire une date d'une autre. Cet exemple convertit les dates en objets car la fonction getTime () ne fonctionnera pas à moins que ce ne soit un objet Date.

    var dat1 = document.getElementById('inputDate').value;
                var date1 = new Date(dat1)//converts string to date object
                alert(date1);
                var dat2 = document.getElementById('inputFinishDate').value;
                var date2 = new Date(dat2)
                alert(date2);

                var oneDay = 24 * 60 * 60 * 1000; // hours*minutes*seconds*milliseconds
                var diffDays = Math.abs((date1.getTime() - date2.getTime()) / (oneDay));
                alert(diffDays);
1
répondu Pec1983 2015-05-12 14:57:30

1000000% sûr...............

 <script>
    function myFunction() {
        var date1=new Date();// for current date
        var date2 =new Date("Sep, 30, 2015");

         // for other date you can get the another date from a textbox by
         // var Newdate=document.getElementById('<%=textBox1.ClientID%>').value;
         // convert Newdate to dateTime by......   var date2=New Date(Newdate);

        var yearDiff=date1.getFullYear()-date2.getFullYear();// for year difference
        var y1=date1.getFullYear();
        var y2=date2.getFullYear();
        var monthDiff=(date1.getMonth() + y1*12)-(date2.getMonth() +y2*12);
        var day1=parseInt(date1.getDate());
        var day2=parseInt(date2.getDate());
        var dayDiff= (day1-day2)+ (monthDiff * 30);
    document.write("Number of day difference : "+dayDiff);
    }
    </script>
-31
répondu Jeetendra singh negi 2014-10-02 18:24:46