Frage

Ich erstelle eine Anwendung, mit der Sie Ereignisse mit einem Zeitrahmen definieren können.Ich möchte das Enddatum automatisch ausfüllen, wenn der Benutzer das Startdatum auswählt oder ändert.Ich kann jedoch nicht ganz herausfinden, wie ich die Differenz zwischen den beiden Zeiten ermitteln und dann anhand dieser Differenz ein neues Enddatum erstellen kann.

War es hilfreich?

Lösung

In JavaScript können Datumsangaben durch den Aufruf von in die Anzahl der Millisekunden seit dem Epoc umgewandelt werden getTime() Methode oder Verwenden Sie einfach das Datum in einem numerischen Ausdruck.

Um die Differenz zu ermitteln, subtrahieren Sie einfach die beiden Daten.

Um ein neues Datum basierend auf der Differenz zu erstellen, übergeben Sie einfach die Anzahl der Millisekunden im Konstruktor.

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

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

Das sollte einfach funktionieren

BEARBEITEN:Fehler behoben, auf den @bdukes hingewiesen hat

BEARBEITEN:

Zur Erklärung des Verhaltens oldBegin, oldEnd, Und newBegin Sind Date Instanzen.Anrufende Operatoren + Und - löst das automatische Javascript-Casting aus und ruft automatisch auf valueOf() Prototypmethode dieser Objekte.Es kommt vor, dass die valueOf() Methode ist in der implementiert Date Objekt als Aufruf an getTime().

Also im Grunde genommen: date.getTime() === date.valueOf() === (0 + date) === (+date)

Andere Tipps

JavaScript unterstützt standardmäßig Datumsunterschiede perfekt

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

Nun einige Fallstricke.Versuche dies:

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

Wenn Sie also Gefahr laufen, eine Zahl und ein Datum hinzuzufügen, konvertieren Sie „Datum“ in number direkt.

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

Mein erstes Beispiel demonstriert die Leistungsfähigkeit des Date-Objekts, aber es scheint tatsächlich eine Zeitbombe zu sein

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

für Ihren HTML-Code:

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

Wenn Ihnen die Zeitkomponente egal ist, können Sie sie verwenden .getDate() Und .setDate() um nur den Datumsteil festzulegen.

Um Ihr Enddatum auf zwei Wochen nach Ihrem Startdatum festzulegen, gehen Sie folgendermaßen vor:

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

Gehen Sie wie folgt vor, um die Differenz (in Tagen) zwischen zwei Daten zurückzugeben:

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

Abschließend ändern wir die erste Funktion so, dass sie den von der zweiten Funktion zurückgegebenen Wert als Parameter annehmen kann:

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

Danke @Vincent Robert, am Ende habe ich Ihr einfaches Beispiel verwendet, obwohl es tatsächlich so ist newBegin + oldEnd - oldBegin.Hier ist die vereinfachte Endlösung:

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

Abhängig von Ihren Anforderungen berechnet diese Funktion die Differenz zwischen den beiden Tagen und gibt ein Ergebnis in Tagen im Dezimalformat zurück.

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

Wenn Sie moment.js verwenden, gibt es eine einfachere Lösung, die Ihnen die Differenz in Tagen in einer einzigen Codezeile anzeigt.

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

Weitere Details finden Sie im moment.js-Seite

Prost, 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')
}

Alternative Modifikation des erweiterten Codes.

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>

Dieser Code füllt die Dauer der Studienjahre, in denen Sie das Startdatum und das Enddatum (qualifiziertes verfälschtes Datum) der Studie eingeben, und prüfen txtFromQualifDate und zweitens txtQualifDate und drittens txtStudyYears

Es wird das Ergebnis der Anzahl der Jahre mit Bruch angezeigt

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

Wenn Sie Datumsobjekte verwenden und dann die verwenden getTime() Wenn Sie die Funktion für beide Daten verwenden, erhalten Sie die jeweiligen Zeiten seit dem 1. Januar 1970 in einem Zahlenwert.Sie können dann die Differenz zwischen diesen Zahlen ermitteln.

Wenn Ihnen das nicht weiterhilft, schauen Sie sich die vollständige Dokumentation an: http://www.w3schools.com/jsref/jsref_obj_date.asp

Der folgende Code gibt die verbleibenden Tage von heute bis zum zukünftigen Datum zurück.

Abhängigkeiten: jQuery und 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);

DAS HABE ICH AUF MEINEM SYSTEM GEMACHT.

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);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top