2016-06-21 20 views
0

Ich habe Code, der überprüft, ob ein Benutzer innerhalb einer bestimmten Zeit (9.00 - 17.30 Uhr) von Montag bis Freitag fällt.Zeitzone auf GB für alle einstellen

function checkTime() { 
    var d = new Date(); // current time 
    var hours = d.getHours(); 
    var mins = d.getMinutes(); 
    var day = d.getDay(); 

    return day >= 1 
      && day <= 5 
      && hours >= 9 
      && (hours < 17 || hours === 17 && mins <= 30); 
} 

Dies funktioniert ordnungsgemäß, aber es überprüft die Zeit basierend auf der Browserzeit des Benutzers.

Was ich tun möchte, ist es zu überprüfen, 9.00 Uhr - 17.30 Uhr UK Time Only.

Also, wenn Sie die Website/Skript aus Amerika um 10.00 Uhr (UTC-7) sehen, würden Sie außerhalb der Zeit Checker sein, weil es 18.00 Uhr (UTC + 1) UK Zeit wäre.

Also ich denke, was ich versuche zu tun, ist die Benutzer Zeitzone und dann konvertieren Sie es in UK Zeit und dann mein checkTime() Skript ausführen?

+3

Verwandte: http://stackoverflow.com/questions/1091372/getting -die-Clients-Zeitzone-in-Javascript. Der knifflige Teil von dort wäre, die britische Zeit zu kennen, da wir das ganze Jahr hindurch Sommerzeit sparen, also könnte der Unterschied zu GMT bedeuten, dass Ihre berechnete Zeit um 1 Stunde abgelaufen ist. Ich würde empfehlen, dass Sie die britische Zeit von einem Server abrufen und dort überprüfen, anstatt eine clientseitige Lösung zu manipulieren. Vor allem, wenn Sie sich darauf verlassen, dass die Client-Uhr richtig eingestellt ist. –

+0

@RoryMcCrossan: '+ new Date()' wird nicht von DST beeinflusst und gibt zufällig den Zeitstempel des Vereinigten Königreichs zurück ... – dandavis

+0

Das OP möchte die Zeit in Großbritannien vom Kundendatum wissen. Alles, was Sie bekommen können, ist die Zeit in GMT (durch Subtraktion der Zeitzone Offset), während für einen Teil des Jahres Großbritannien läuft auf BST (dh GMT + 1) –

Antwort

1

Wie Rory in den Kommentaren erwähnt, wenn Ihr Bezugspunkt eine bestimmte Zeitzone ist (UK-Zeit in diesem Fall), dann benötigen Sie Logik, um die Art dieser Zeitzone zu verstehen - insbesondere im Hinblick auf die Zeitzonen Sommerzeitübergänge oder andere Änderungen an ihrem Zeitzonen-Offset.

Die lokale Zeit in Großbritannien wechselt zwischen GMT (UTC + 00: 00) und BST (UTC + 01: 00) und folgt derzeit die Europäische Union Übergangsregeln (letzter Sonntag im März bis zum letzten Sonntag im Oktober, die beide um 01:00 UTC).

Sie könnten diese Regeln sicherlich in Ihre eigene Logik einprogrammieren, aber Sie würden wahrscheinlich feststellen, dass der Code übermäßig komplex und schwierig zu verwalten ist. Ein besserer Ansatz ist die Verwendung einer Bibliothek, die für diesen Zweck entwickelt wurde. I list several of them here.

Zum Beispiel mit der moment-timezone Bibliothek, die ein Begleiter Bibliothek für die beliebte moment.js Bibliothek ist, können Sie einfach tun:

function checkTime() { 

    // now in the UK 
    var m = moment.tz("Europe/London"); 

    // use moment.js getters 
    var hours = m.hour(); 
    var mins = m.minute(); 
    var day = m.day(); 

    // your original logic retained 
    return day >= 1 
      && day <= 5 
      && hours >= 9 
      && (hours < 17 || hours === 17 && mins <= 30); 
} 
+0

Danke Matt, macht Sinn. :) – BoneStarr