Question

Je crée une application qui vous permet de définir des événements avec une plage horaire.Je souhaite remplir automatiquement la date de fin lorsque l'utilisateur sélectionne ou modifie la date de début.Cependant, je n'arrive pas à comprendre comment obtenir la différence entre les deux heures, puis comment créer une nouvelle date de fin en utilisant cette différence.

Était-ce utile?

La solution

En JavaScript, les dates peuvent être transformées en nombre de millisecondes depuis l'époque en appelant le getTime() méthode ou en utilisant simplement la date dans une expression numérique.

Donc pour obtenir la différence, soustrayez simplement les deux dates.

Pour créer une nouvelle date basée sur la différence, transmettez simplement le nombre de millisecondes dans le constructeur.

var oldBegin = ...
var oldEnd = ...
var newBegin = ...

var newEnd = new Date(newBegin + oldEnd - oldBegin);

Cela devrait juste fonctionner

MODIFIER:Correction d'un bug signalé par @bdukes

MODIFIER:

Pour une explication du comportement, oldBegin, oldEnd, et newBegin sont Date instances.Opérateurs appelants + et - déclenchera la diffusion automatique de Javascript et appellera automatiquement le valueOf() méthode prototype de ces objets.Il arrive que le valueOf() la méthode est mise en œuvre dans le Date objet comme un appel à getTime().

Donc en gros: date.getTime() === date.valueOf() === (0 + date) === (+date)

Autres conseils

JavaScript prend parfaitement en charge la différence de date dès le départ

var msMinute = 60*1000, 
    msDay = 60*60*24*1000,
    a = new Date(2012, 2, 12, 23, 59, 59),
    b = new Date("2013 march 12");


console.log(Math.floor((b - a) / msDay) + ' full days between');
console.log(Math.floor(((b - a) % msDay) / msMinute) + ' full minutes between');

Maintenant quelques pièges.Essaye ça:

console.log(a - 10);
console.log(a + 10);

Donc, si vous risquez d'ajouter un nombre et une date, convertissez Date en number directement.

console.log(a.getTime() - 10);
console.log(a.getTime() + 10);

Mon premier exemple démontre la puissance de l'objet Date, mais il semble en réalité être une bombe à retardement.

Voir la DÉMO de JsFiddle

    var date1 = new Date();    
    var date2 = new Date("2025/07/30 21:59:00");
    //Customise date2 for your required future time

    showDiff();

function showDiff(date1, date2){

    var diff = (date2 - date1)/1000;
    diff = Math.abs(Math.floor(diff));

    var days = Math.floor(diff/(24*60*60));
    var leftSec = diff - days * 24*60*60;

    var hrs = Math.floor(leftSec/(60*60));
    var leftSec = leftSec - hrs * 60*60;

    var min = Math.floor(leftSec/(60));
    var leftSec = leftSec - min * 60;

    document.getElementById("showTime").innerHTML = "You have " + days + " days " + hrs + " hours " + min + " minutes and " + leftSec + " seconds before death.";

setTimeout(showDiff,1000);
}

pour votre code HTML :

<div id="showTime"></div>

Si vous ne vous souciez pas de la composante temporelle, vous pouvez utiliser .getDate() et .setDate() pour simplement régler la partie date.

Donc, pour fixer votre date de fin à 2 semaines après votre date de début, procédez comme ceci :

function GetEndDate(startDate)
{
    var endDate = new Date(startDate.getTime());
    endDate.setDate(endDate.getDate()+14);
    return endDate;
}

Pour renvoyer la différence (en jours) entre deux dates, procédez comme suit :

function GetDateDiff(startDate, endDate)
{
    return endDate.getDate() - startDate.getDate();
}

Enfin, modifions la première fonction pour qu'elle puisse prendre la valeur renvoyée par 2nd comme paramètre :

function GetEndDate(startDate, days)
{
    var endDate = new Date(startDate.getTime());
    endDate.setDate(endDate.getDate() + days);
    return endDate;
}

Merci @Vincent Robert, j'ai fini par utiliser votre exemple de base, même si c'est en fait newBegin + oldEnd - oldBegin.Voici la solution finale simplifiée :

    // don't update end date if there's already an end date but not an old start date
    if (!oldEnd || oldBegin) {
        var selectedDateSpan = 1800000; // 30 minutes
        if (oldEnd) {
            selectedDateSpan = oldEnd - oldBegin;
        }

       newEnd = new Date(newBegin.getTime() + selectedDateSpan));
    }

En fonction de vos besoins, cette fonction calculera la différence entre les 2 jours, et retournera un résultat en jours décimaux.

// This one returns a signed decimal. The sign indicates past or future.

this.getDateDiff = function(date1, date2) {
    return (date1.getTime() - date2.getTime()) / (1000 * 60 * 60 * 24);
}

// This one always returns a positive decimal. (Suggested by Koen below)

this.getDateDiff = function(date1, date2) {
    return Math.abs((date1.getTime() - date2.getTime()) / (1000 * 60 * 60 * 24));
}

Si vous utilisez moment.js, il existe une solution plus simple, qui vous donnera la différence en jours sur une seule ligne de code.

moment(endDate).diff(moment(beginDate), 'days');

Des détails supplémentaires peuvent être trouvés dans le page moment.js

Bravo, Miguel

function compare()
{
  var end_actual_time    = $('#date3').val();

  start_actual_time = new Date();
  end_actual_time = new Date(end_actual_time);

  var diff = end_actual_time-start_actual_time;

  var diffSeconds = diff/1000;
  var HH = Math.floor(diffSeconds/3600);
  var MM = Math.floor(diffSeconds%3600)/60;

  var formatted = ((HH < 10)?("0" + HH):HH) + ":" + ((MM < 10)?("0" + MM):MM)
  getTime(diffSeconds);
}
function getTime(seconds) {
  var days = Math.floor(leftover / 86400);

  //how many seconds are left
  leftover = leftover - (days * 86400);

  //how many full hours fits in the amount of leftover seconds
  var hours = Math.floor(leftover / 3600);

  //how many seconds are left
  leftover = leftover - (hours * 3600);

  //how many minutes fits in the amount of leftover seconds
  var minutes = leftover / 60;

  //how many seconds are left
  //leftover = leftover - (minutes * 60);
  alert(days + ':' + hours + ':' + minutes);
}
function checkdate() {
    var indate = new Date()
    indate.setDate(dat)
    indate.setMonth(mon - 1)
    indate.setFullYear(year)

    var one_day = 1000 * 60 * 60 * 24
    var diff = Math.ceil((indate.getTime() - now.getTime()) / (one_day))
    var str = diff + " days are remaining.."
    document.getElementById('print').innerHTML = str.fontcolor('blue')
}

code étendu de modification alternative.

http://jsfiddle.net/vvGPQ/48/

showDiff();

function showDiff(){
var date1 = new Date("2013/01/18 06:59:00");   
var date2 = new Date();
//Customise date2 for your required future time

var diff = (date2 - date1)/1000;
var diff = Math.abs(Math.floor(diff));

var years = Math.floor(diff/(365*24*60*60));
var leftSec = diff - years * 365*24*60*60;

var month = Math.floor(leftSec/((365/12)*24*60*60));
var leftSec = leftSec - month * (365/12)*24*60*60;    

var days = Math.floor(leftSec/(24*60*60));
var leftSec = leftSec - days * 24*60*60;

var hrs = Math.floor(leftSec/(60*60));
var leftSec = leftSec - hrs * 60*60;

var min = Math.floor(leftSec/(60));
var leftSec = leftSec - min * 60;




document.getElementById("showTime").innerHTML = "You have " + years + " years "+ month + " month " + days + " days " + hrs + " hours " + min + " minutes and " + leftSec + " seconds the life time has passed.";

setTimeout(showDiff,1000);
}
<html>
<head>
<script>
function dayDiff()
{
     var start = document.getElementById("datepicker").value;
     var end= document.getElementById("date_picker").value;
     var oneDay = 24*60*60*1000; 
     var firstDate = new Date(start);
     var secondDate = new Date(end);    
     var diffDays = Math.round(Math.abs((firstDate.getTime() - secondDate.getTime())/(oneDay)));
    document.getElementById("leave").value =diffDays ;
 }
</script>
</head>
<body>
<input type="text" name="datepicker"value=""/>
<input type="text" name="date_picker" onclick="function dayDiff()" value=""/>
<input type="text" name="leave" value=""/>
</body>
</html>

Ce code remplit la durée des années d'étude lorsque vous saisissez la date de début et la date de fin (qualifier la date acquittée) de l'étude et vérifiez si la durée inférieure à un an si oui l'alerte, un message prend à l'esprit qu'il y a trois éléments d'entrée le premier txtFromQualifDate et deuxieme txtQualifDate et troisième txtStudyYears

il affichera le résultat du nombre d'années avec une fraction

function getStudyYears()
    {
        if(document.getElementById('txtFromQualifDate').value != '' && document.getElementById('txtQualifDate').value != '')
        {
            var d1 = document.getElementById('txtFromQualifDate').value;

            var d2 = document.getElementById('txtQualifDate').value;

            var one_day=1000*60*60*24;

            var x = d1.split("/");
            var y = d2.split("/");

            var date1=new Date(x[2],(x[1]-1),x[0]);

            var date2=new Date(y[2],(y[1]-1),y[0])

            var dDays = (date2.getTime()-date1.getTime())/one_day;

            if(dDays < 365)
            {
                alert("the date between start study and graduate must not be less than a year !");

                document.getElementById('txtQualifDate').value = "";
                document.getElementById('txtStudyYears').value = "";

                return ;
            }

            var dMonths = Math.ceil(dDays / 30);

            var dYears = Math.floor(dMonths /12) + "." + dMonths % 12;

            document.getElementById('txtStudyYears').value = dYears;
        }
    }

Si vous utilisez des objets Date et que vous utilisez ensuite le getTime() fonction pour les deux dates, elle vous donnera leurs heures respectives depuis le 1er janvier 1970 sous forme numérique.Vous pouvez alors obtenir la différence entre ces nombres.

Si cela ne vous aide pas, consultez la documentation complète : http://www.w3schools.com/jsref/jsref_obj_date.asp

Le code ci-dessous renverra les jours restants entre aujourd’hui et la date à terme.

Dépendances : jQuery et MomentJs.

var getDaysLeft = function (date) {
  var today = new Date();
  var daysLeftInMilliSec = Math.abs(new Date(moment(today).format('YYYY-MM-DD')) - new Date(date));
  var daysLeft = daysLeftInMilliSec / (1000 * 60 * 60 * 24);   
  return daysLeft;
};

getDaysLeft('YYYY-MM-DD');
var getDaysLeft = function (date1, date2) {
   var daysDiffInMilliSec = Math.abs(new Date(date1) - new Date(date2));
   var daysLeft = daysDiffInMilliSec / (1000 * 60 * 60 * 24);   
   return daysLeft;
};
var date1='2018-05-18';
var date2='2018-05-25';
var dateDiff = getDaysLeft(date1, date2);
console.log(dateDiff);

C'EST CE QUE J'AI FAIT SUR MON SYSTÈME.

var startTime=("08:00:00").split(":");
var endTime=("16:00:00").split(":");
var HoursInMinutes=((parseInt(endTime[0])*60)+parseInt(endTime[1]))-((parseInt(startTime[0])*60)+parseInt(startTime[1]));
console.log(HoursInMinutes/60);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top