2016-11-06 1 views
0

Also lassen Sie mich erklären. Ich arbeite an einer Seite, wo Leute sich einloggen, wie lange sie etwas machen. Das Problem ist, wenn jemand etwas von 23:00 bis 2:00 macht. Das Skript, das ich jetzt habe, sagt, es ist -21 Stunden.Javascript Zeit Berechnung von gestern bis morgen

Das zweite Problem ist es berechnet Minuten in Dezimalzahlen. Zum Beispiel 1:15 ist 1,25. Das ist nicht wirklich ein großes Problem, aber meine zweite Frage ist, kann ich Ergebnisse in Minuten bekommen?

Für meine primäre Frage, wie kann ich eine Bedingung setzen, wenn von einem Tag zum anderen 24- $ berechnen Ergebnis andernfalls normal berechnen?

Das ist, was ich habe jetzt:

$(function() { 
     $("#check").click(function() { 
      var start = $(".preveri_ure").val(); 
      var end = $(".preveri_ure_2").val(); 
      s = start.split(':'); 
      e = end.split(':'); 
      min = e[1]-s[1]; 
      hour_carry = 0; 
      if(min < 0){ 
       min += 60; 
       hour_carry += 1; 
      } 
      hour = e[0]-s[0]-hour_carry; 
      min = ((min/60)*100).toString() 
      diff = hour + "," + min.substring(0,2); 
      $("#show").text("Task lasted for : " + diff + "hours"); 
    }); 

EDIT:

Start- und End-Stunden werden von den Benutzern in einem Eingabefeld mit diesem Format eingegeben werden: Start: 07.00 Ende 20: 15

Auch Zeitdifferenz ist immer weniger als 24 Stunden. Also Datum ist nicht erforderlich.

+0

Es sieht aus wie die 'Starten' und' end' Werte durch den Benutzer eingegeben werden. Welche Art von Eingabeelementen verwenden Sie? Wenn Sie nur die Zeit sammeln, ist das Ihr Problem. Sie müssen ein vollständiges Datum erfassen. –

+0

Entschuldigung vergessen zu erwähnen Start und Ende Stunden werden von Benutzern in einem Eingabefeld mit diesem Format eingegeben: Start: 7:00 Ende 20:15 Ich habe meine Frage bearbeitet. Vielen Dank! –

+0

Nun, Sie müssen das ändern, damit ein vollständiges Datum eingegeben wird. Sie können 'input type = date' dafür verwenden. –

Antwort

1

Stimmen Sie völlig mit @Scott Marcus überein. Es ist einfacher zu vergleichen, wenn das ganze Datum statt nur Stunde und Minute ist.

Aber von @Studio DnB Perspektive, lassen Sie uns betrachten Start-und Endzeit gehören zum selben Tag. Die Startzeit muss jedoch kleiner als die Endzeit in der Dropdown-Auswahl sein.

hier Code

var tempStartDate = new Date(); // just inintialise start and end date 
var tempEndtDate = new Date();  
s = date1.split(':'); 
e = date2.split(':'); 
tempStartDate.setHours(s[0], s[1], 0); // set Hours and Minutes for start and end date 
tempEndtDate.setHours(e[0], e[1], 0); 

var startTime ; 
var endTime ; 
    // compare to make start time less then end time always for same day log 
if (tempEndtDate.getTime() > tempStartDate.getTime()){ 
     endTime = tempEndtDate.getTime(); 
     startTime= tempStartDate.getTime(); 
    } 
else { 
     endTime = tempStartDate.getTime(); 
    startTime= tempEndtDate.getTime(); 
} 

    var difference = endTime - startTime; 

    var hoursDifference = Math.floor(difference/1000/60/60); 
    difference -= hoursDifference*1000*60*60 

    var minutesDifference = Math.floor(difference/1000/60); 
    difference -= minutesDifference*1000*60 

Beispiel ist auf https://jsfiddle.net/fNPvf/32377/

+0

Wow Großartig !!! . Sie können die Funktion ohne Parameter verwenden und den Wert Ihres Dropdown-Menüs an Variablen übergeben. fröhliche Codierung. Danke – monikapatel

+0

Fast dachte, das funktioniert aber immer noch für die Startzeit 23:00 und die Endzeit 02:00 Uhr sagt 21 Stunden –

+0

Ich brauche eine Bedingung - wenn Zeit 1 größer ist als Zeit 2 als diese Mathe verwenden: 24 - Unterschied. Also für 23:00 bis 2:00 sollte die Mathematik 24- (23-2) sein. Eigentlich denke ich, das ist die richtige Bedingung: if (tempEndtDate.getTime()> tempStartDate.getTime()) { Also, wenn ich die Mathematik dort könnte es funktionieren? Aber dann müsste ich die hoursDifference in else statement eintragen? –

3

Wenn die ersten Stunden größer sind als die zweite, addieren Sie zu den zweiten 24 Stunden.

Eine bessere Lösung des Ereignisses ist es, von jedem ein JavaScript-Date-Objekt zu erstellen und zu subtrahieren.

+0

Was ist, wenn mehr als ein ganzer Tag vergangen ist? Ihr Vorschlag würde einen Tag oder mehr verlieren, wenn dies der Fall ist. –

+0

@ScottMarcus Wenn es mehr als ein ganzer Tag ist und alles, was er hat, ist die Zeit, da ist nichts zu tun. Ich nehme an, es ist nie mehr als ein Tag.Lesen Sie seine Frage erneut und sehen, dass dies wahr ist.Bitte entfernen Sie die Stimme –

+0

Deshalb ist Ihre Antwort nicht korrekt. –

0

würde ich den Benutzer erfordert Datum und Uhrzeit eingeben und Javascript UTC verwenden, die die spezifische Datums- und Uhrzeit auf Sekunden seit 1970 1. JANUAR wandeln http://www.w3schools.com/jsref/jsref_utc.asp Dann berechnen startdate - endDate und Minuten zu konvertieren.

Verwandte Themen