2015-12-04 9 views
5

Dies ist eine einfache Sache in PHP mit Code wie diesem;Überprüfen Sie, ob der Zeitunterschied weniger als 45 Minuten beträgt und führen Sie die Funktion aus - AngularJS

if (strtotime($given_time) >= time()+300) echo "You are online"; 

Aber kann nichts über SO finden genau dies in Javascript zu tun. Ich mag zwischen einer gegebenen Zeit und der aktuellen Zeit ist weniger als 45 Minuten

Zum Beispiel

$scope.given_time = "14:10:00" 
$scope.current_time = new Date(); 

Ich bin nur mit der Zeit teilweise, wenn die Differenz überprüfen. Ich muss Zeitteil von new Date(); extrahieren und dann vergleichen.

Dann sollte diese true

sein Wie kann ich dies mit Javascript erreichen:

if ($scope.given_time - $scope.current_time < 45 minutes) { 
    // do something 
} 
+1

können Sie' getMinutes verwenden. – www139

+1

hast du versucht, Plugin wie moment.js zu verwenden? –

+1

Wie oft überprüft es den Zeitunterschied? Wenn du ein window.setInterval benutzt und es jede Minute überprüft hast, könntest du die 'getMinutes()' Funktion benutzen und es einfach so vergleichen. – www139

Antwort

0

Try this:

function checkTime(time) { 
 
    var date = new Date(); 
 
    var date1 = new Date((date.getMonth() + 1) + "/" + date.getDate() + "/" + date.getFullYear() + " " + time); 
 

 
    var minutes = (date1.getTime() - date.getTime())/(60 * 1000); 
 

 
    if (minutes > 45 || (minutes < 0 && minutes > -1395)) { 
 
    // greater than 45 is todays time is above 45 minutes 
 
    // less than 0 means the next available time will be tomorrow and the greater than -1395 means it will be more than 45 minutes from now into tomorrow 
 

 
    document.write(time + ': true<br />'); 
 
    } else { 
 
    document.write(time + ': false<br />'); 
 
    } 
 
} 
 

 
checkTime("14:10:00"); 
 
checkTime("16:30:00"); 
 
checkTime("17:10:00");

+0

Können Sie diese Funktion ändern, um auch zu überprüfen, ob die aktuelle Uhrzeit (einschließlich Datum) die angegebene Zeit überschritten hat ... Danke –

+0

@ moh.ABK können Sie bitte eine neue Frage dafür stellen, da dies eine ganze Menge ändern würde – Pete

2

Javascript verwendet Unix-Zeitstempel in Millisekunden, so ist es ähnlich wie bei der Ausgabe von strtotime (die Sekunden verwendet).

var date = new Date(); 

Dann müssen Sie die Berechnung von Millisekunden durchführen. (Minuten * 60 * 1000)

Sie können auch date.parse() verwenden, um eine Zeichenfolge in Millisekunden zu analysieren, genau wie strtotime() in PHP in Sekunden.

In voller Länge:

var date = new Date(); 
var last = new Date('Previous Date'); // or a previous millisecond timestamp 
if ((date - last) > (45 * 60 * 1000)) { 
    // do something 
} 

Sie könnten ein statisches Datum verwenden nur Zeit zu vergleichen, das ist genau das, was strtotime tut, wenn Sie das Datum ausschließen:

var last = new Date('1/1/70 14:10:00'); 
var date = new Date('1/1/70 14:30:00'); 

Allerdings wird dieser Ansatz scheitern wenn du versuchst, die Zeit zu vergleichen, die über Tagesgrenzen hinweggeht.

+0

Ich möchte nicht über "Datum" .. Nur wenige Minuten. 'new Date()' gibt Ihnen die komplette Datumszeichenkette –

+2

@ moh.ABK Sie müssen nicht die vollständige Datumszeichenkette in Ihrer Berechnung verwenden, Sie könnten ein statisches Datum verwenden, aber Sie sollten. Was passiert, wenn der Zeitrahmen Tage kreuzt? 11:59 Uhr gegen 12:01 Uhr. – Devon

0

Es gibt eine JavaScript-Methode namens getMinutes(); Sie können verwenden, um nur die Minuten zu erhalten und zu vergleichen.

Der Code sollte ungefähr so ​​aussehen:

var received_time = "14:10:00".split(':'); 
    var minute = ''; 
    if(received_time.length === 3) { 
     minute = parseInt(received_time[1], 10); 
    } 
    $scope.given_time = minute; 
    var the_time = new Date(); 
    $scope.current_time = the_time.getMinutes(); 

Und Sie können jetzt Ihre Sache tun:

if ($scope.given_time - $scope.current_time < 45 minutes) { 
    // do something 
} 
+1

Das kann nicht verwendet werden, um Unterschiede sehr einfach zu berechnen. 11:01 würde 1 zurückgeben und 10:59 würde 59 zurückgeben. – Devon

+0

@Devon, also ... warum sollte das nicht funktionieren? – Ionut

+1

Weil das wäre ein Unterschied von -58, nicht 2 ... – Devon

0

Mit einer Bibliothek wie moment.js können Sie einfach die beiden Zeiten unterscheiden.

var $log = $("#log"); 
 

 
/* Difference between just times */ 
 
$log.append("Difference between times\n"); 
 
var givenTime = moment("14:10:00", "HH:mm:ss"); 
 
var minutesPassed = moment("14:30:00", "HH:mm:ss").diff(givenTime, "minutes"); 
 

 
$log.append("Minutes passed: " + minutesPassed + "\n"); 
 

 
if (minutesPassed < 45) { 
 
    $log.append(minutesPassed + " minutes have elapsed. Event Triggered." + "\n"); 
 
} 
 

 

 
/* Better: Difference between times that have dates attached to them and cross a day boundary. */ 
 
$log.append("\n\nDifference between dates with times\n"); 
 
givenTime = moment("2015-12-03 23:33:00"); 
 
minutesPassed = moment("2015-12-04 00:14:00").diff(givenTime, "minutes"); 
 

 
$log.append("Minutes passed: " + minutesPassed + "\n"); 
 

 
if (minutesPassed < 45) { 
 
    $log.append(minutesPassed + " minutes have elapsed. Event Triggered." + "\n"); 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<script src="http://momentjs.com/downloads/moment.js"></script> 
 
<p>Results:</p> 
 
<hr> 
 
<pre id="log"></pre> 
 
<hr>

Caveat: Wenn die gegebene Zeit gestern wie 23.30 und die aktuelle Zeit ist 00.10 ist, dann werden Sie das falsche Ergebnis. Sie möchten ein Datum mit der Zeit verwenden, wenn diese Art von Sache ein Problem für Ihren Anwendungsfall ist.() `Für das Datum Objekt

Die moment.js Dokumentation

http://momentjs.com/docs/

Angular Richtlinie für Moment Dokumentation

https://github.com/urish/angular-moment/blob/master/README.md

+0

Können Sie Ihren Code so aktualisieren, dass er das Datum enthält? Kann ich auch die normale "Moment" -Bibliothek in Angular verwenden? –

+0

@ moh.ABK Ich habe es mit Daten aktualisiert, aber Sie müssen es ändern, um mit Ihrem Datumsformat zu arbeiten. Wenn Sie die Drehimpuls-Anweisung verwenden, sollten Sie in Ihrer Anwendung bereits Zugriff auf moment() haben. Sie müssen es nur in Ihre Konstruktoren einfügen. – Voziv

Verwandte Themen