2012-04-01 4 views
0

Ich habe einige Probleme mit dem Anzeigen, wie viel Zeit noch übrig ist.PHP Time-Left Error

Dies ist mein Code:

echo date("H:i:s", $show_job['deadline'] - time()); 

Mein Server-Zeitzone ist: Europe/Amsterdam

Dies ist, was die Zeit in die Datenbank gehen ist:

$currentTimestamp = time(); 
$in24hourstime = strtotime("+24 hours", $currentTimestamp); 

Das Problem ist, dass einige meiner Benutzer zum Beispiel 10 Stunden anstatt 24 Stunden bekommen. Meine Vermutung ist, dass diese Benutzer aus verschiedenen Zeitzonen stammen. Ich bin in London.

Was könnte diesen Fehler verursachen? Danke im Voraus.

+0

Offtopic: Warum nicht '+1 Tag'? '+24 Stunden' verursachen Probleme in Zeitzonen, die Sommer-/Winterzeit unterstützen. – Basti

+0

Ich glaube nicht, dass das der Fehler sein könnte. Ich benutze diesen Code woanders, 2 Minuten und einige Spieler bekommen 11 Stunden und 2 Minuten. Ich werde das trotzdem versuchen, danke. –

+0

'$ in24hourstime = $ currentTimestamp + 86400;' – kijin

Antwort

1

Zunächst ist es eine gute Idee explizit die Standard-Zeitzone in Ihrem Skript mit der PHP-Funktion date Funktion wie so eingestellt auf:

date_default_timezone_set('Europe/London'); 

Siehe http://php.net/manual/en/function.date-default-timezone-set.php

Diese verwenden alle die richtige interne Zeitzone Berechnungen Datum gewährleistet. Wenn Sie das Datum dem Benutzer anzeigen, können Sie die Zeit entsprechend der Zeitzone anpassen.

Ändern Ihres Beispiel kann leicht für jetzt zwei Variablen mit UNIX-Zeitstempeln erstellen und in 24 Stunden:

$now = time(); 
$in24hourstime = strtotime("+24 hours", $now); 

den Unterschied berechnen wir eine vom anderen subtrahieren können uns den Unterschied in Sekunden zu geben:

$remaining = $in24hourstime - $now;  

In unserem Beispiel ist der verbleibende Wert von $ 86400 Sekunden. Wäre dieser Wert 0 oder eine negative Zahl, können wir davon ausgehen, dass die Frist abgelaufen ist.

if($remaining > 0) { 

    $hours = intval(intval($remaining)/3600); 
    $minutes = intval(($remaining/60) % 60); 
    $seconds = intval($remaining % 60); 

    echo $hours . ' hours, '.$minutes.' minutes and '.$seconds . ' seconds remaining!'; 

} else { 

    echo "Deadline has been met. No time remaining!"; 
} 

Als Nebenwirkung kann man mit PHP Datetime-Klasse, die als meiner Meinung nach finden bietet es viele Vorteile gegenüber dem eingebauten time() und Datum() und einem einfacheren Weg, mit Zeitzonen umgehen:

See : http://php.net/manual/en/book.datetime.php

+0

Die Zeitzone ist die Standardzeitzone des Servers. Ich habe tatsächlich eine ähnliche Methode wie Sie verwendet und es scheint so weit zu arbeiten. Wenn nicht, werde ich Ihre benutzen, aber Sie für Ihre Antwort! –