Domanda

Sto creando un'applicazione che consente di definire gli eventi con un lasso di tempo.Voglio inserire automaticamente la data di fine, quando l'utente seleziona o modifica della data di inizio.Non riesco a capire, però, come ottenere la differenza tra i due tempi, e quindi come creare una nuova Data di fine utilizzo di tale differenza.

È stato utile?

Soluzione

In JavaScript, le date possono essere trasformati per il numero di millisecondi trascorsi dall'epoc, chiamando il getTime() metodo o usando solo la data in un'espressione numerica.

Quindi, per ottenere la differenza, basta sottrarre le due date.

Per creare una nuova data, in base alla differenza, basta passare il numero di millisecondi nel costruttore.

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

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

Questo dovrebbe solo funzionare

MODIFICA:Corretto il bug segnalati da @bdukes

MODIFICA:

Per una spiegazione del comportamento, oldBegin, oldEnd, e newBegin sono Date le istanze.Chiamando gli operatori + e - attiverà Javascript auto casting e chiamerà automaticamente il valueOf() prototipo metodo di quegli oggetti.Succede che il valueOf() il metodo è implementato nel Date oggetto come una chiamata a getTime().

Quindi, in pratica: date.getTime() === date.valueOf() === (0 + date) === (+date)

Altri suggerimenti

JavaScript supporta perfettamente la data di differenza dalla scatola

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');

Ora alcune insidie.Prova questo:

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

Quindi, se si dispone di rischio di aggiungere un numero e Data, Data per la conversione number direttamente.

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

Il mio pugno esempio dimostra il potere di Data oggetto, ma in realtà sembra essere una bomba a tempo

Vedere JsFiddle DEMO

    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);
}

per il Codice HTML:

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

Se non ti interessa la componente tempo, è possibile utilizzare .getDate() e .setDate() basta impostare la data parte.

Quindi, per impostare la data di fine per 2 settimane dopo la data di inizio e di fare qualcosa di simile a questo:

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

Per restituire la differenza in giorni tra due date, a fare questo:

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

Infine, andiamo a modificare la prima funzione, in modo che si può prendere il valore restituito da 2 parametri:

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

Grazie @Vincent Robert, Ho finito per usare il tuo esempio di base, anche se in realtà newBegin + oldEnd - oldBegin.Ecco il finale semplificata soluzione:

    // 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));
    }

A seconda delle tue esigenze, questa funzione calcola la differenza tra i 2 giorni, e restituire un risultato in giorni decimale.

// 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));
}

Se si utilizza moment.js c'è una soluzione più semplice, che vi darà la differenza in giorni in una singola riga di codice.

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

Ulteriori dettagli possono essere trovati in moment.js pagina

Ciao 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')
}

alternativa modificitaion codice esteso..

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>

questo codice riempie la durata di anni di studio, quando si immette la data di inizio e data di fine(qualificare maturato data) di studio e di verificare se la durata inferiore a un anno se sì l'avviso di un messaggio prendere in considerazione ci sono tre elementi di input il primo txtFromQualifDate e secondo txtQualifDate e il terzo txtStudyYears

si mostrerà il risultato di diversi anni con frazione

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;
        }
    }

Se si utilizza oggetti di Data e quindi utilizzare il getTime() funzione per entrambe le date che vi darà loro rispettivi volte a partire dal 1 ° gennaio 1970, in un valore numerico.È quindi possibile ottenere la differenza tra questi numeri.

Se questo non aiuta, controlla la documentazione completa: http://www.w3schools.com/jsref/jsref_obj_date.asp

Di seguito codice restituisce i giorni, da oggi a futures data.

Dipendenze: jQuery e 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);

QUESTO È QUELLO CHE HO FATTO SUL MIO SISTEMA.

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);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top