2010-02-24 5 views
7

Ich schreibe ein PHP-System und ich brauche die Systemzeit. Nicht die GMT-Zeit oder die Zeit, die für eine Zeitzone spezifisch ist, sondern die gleiche Systemzeit, die vom CRON-System verwendet wird. Ich habe einen CRON-Job, der jeden Tag um Mitternacht läuft und ich möchte auf einer Webseite zeigen, wie lange es dauern wird, bis es wieder läuft.Wie bekomme ich die lokale Systemzeit in PHP?

Zum Beispiel: Im Moment ist es 18 Uhr auf meiner Systemuhr. Ich lasse den Code laufen:

$timeLeftUntilMidnight = date("H:i", strtotime("tomorrow") - strtotime("now")); 

Das Ergebnis ist jedoch "3:00" statt "6:00". Wenn ich rufe

date("H:i", strtotime("tomorrow")); 

Es gibt 0:00 zurück, die korrekt ist. Aber wenn ich renne

date("H:i", strtotime("now")); 

Es gibt 21:00, obwohl die richtige 18:00 sein sollte.

Danke.

+0

Lassen Sie mich versuchen zu klären: Wenn ich Datum ("H: ich", Zeit()) ausführen, wird es mir eine Zeit zeigen, die 3 Stunden von jetzt an ist. Deshalb gibt mir strtotime ("morgen") - strtotime ("jetzt") 3 Stunden weniger als korrekt. Zum Beispiel ist es 18 Uhr und der Cronjob läuft um 12 Uhr, aber strtotime ("morgen") - strtotime ("jetzt") gibt 3 Stunden zurück, weil "morgen" 00:00 ist, aber "jetzt" ist 9 Uhr. – JohnWithoutArms

+0

@JohnWithoutArms Können Sie Ihren Beitrag bitte mit diesem Code aktualisieren? –

+0

Habe gerade, danke. – JohnWithoutArms

Antwort

5

php's time wird die Systemzeit zurückgeben. Sie können es formatiert mit date

, wenn Sie nur vielleicht die Zeit, in der lokalen Zeit des Besuchers angezeigt werden sollen bist du besser dran ein wenig mit Hilfe von Javascript

+0

Ich habe versucht, Datum ("H: i", Zeit()) gibt die GMT-Zeit zurück, nicht die lokale Systemzeit. – JohnWithoutArms

+0

Sind Sie sicher, dass Ihre Serverzeit nicht auf GMT eingestellt ist? Werden Ihre Cron-Jobs auf dem gleichen Server wie Ihre PHP-Skripte ausgeführt? – knittl

+0

Das Ergebnis aus dem Datum ("H: i", time()) Anruf ist der gleiche auf meinem Windows-Rechner (mit Systemuhr auf lokale Zeit eingestellt) und auf einem Linux-Rechner (überprüft die Zeit mit "top", es ist die gleiche lokale Zeit wie meine Windows-Maschine). Das Ergebnis ist die (korrekte) GMT-Zeit, nicht die Ortszeit. – JohnWithoutArms

0

time()

Sie geben die aktueller Systemzeitstempel

Manual

Gibt die aktuelle in der Anzahl der Sekunden seit der Unix-Epoche (1. Januar 1970 00:00:00 GMT) gemessene Zeit.

+1

Allerdings gibt time() PHP localtime zurück, nicht die Systemzeit. – stivlo

0

Sie können das Datum/Uhrzeit des Servers erhalten, auf dem PHP läuft mit der time() Funktion - es wird einen Zeitstempel zurückgeben, die die aktuellen Datumzeit entspricht.

Es ist die Systemzeit, auf diesem Server - die gleiche wie von Cron verwendet.

+2

time() gibt die PHP-Zeit und nicht die Maschinenzeit zurück. – stivlo

0

Wenn Sie die GMT-Zeit möchten, können Sie gmtstrftime() verwenden, die Ihnen die Systemzeit aber wie in GMT geben wird. Es gibt weitere Informationen unter http://us2.php.net/gmstrftime.

+1

Die time() -Funktion gibt mir die GMT-Zeit; Ich will nicht die GMT Zeit, ich möchte die aktuelle Systemzeit. – JohnWithoutArms

0

Wenn Sie nach einem formatierten Datum sind:

date ('d/m/y h:i:s'); 

den Trick, gibt es keine Notwendigkeit, Zeit() in Datum zu übergeben, wie es zu der aktuellen Systemzeit ausfällt, wenn kein zweiter Parameter geliefert wird .

für mehr Formatierungsoptionen siehe hier: http://php.net/manual/en/function.date.php

Ansonsten können Sie nur verwenden

time() 

Um Ihnen den aktuellen Unix-Zeitstempel zu erhalten, wie andere erwähnt haben.

+1

Ich verstehe, dass das Problem ist, dass dieser Aufruf von Datum() gibt mir die GMT-Zeit, die 3 Stunden vor meiner Systemzeit ist. – JohnWithoutArms

+0

@ JohnWithoutArms, sind Sie sicher, dass Ihr Serversystem nicht auf GMT eingestellt ist? Date() ohne Argumente sollte Ihnen den aktuellen Zeitstempel des Systems geben, kein Zeitzonen-Fiedeln. –

+0

Ja ... Ich habe auf einer Windows-Maschine getestet, und die Zeit auf dem Tablett ist in der Tat meine Ortszeit und nicht GMT. Das könnte ein Windows-Problem sein, ich habe meinen Code auf einem Linux-Server bekommen, habe die Zeit mit "top" überprüft (es war korrekt, Ortszeit), habe den Code ausgeführt und die Ergebnisse waren gleich. – JohnWithoutArms

5

Es gibt viele Antworten, aber zum Zeitpunkt des Schreibens ist noch nicht einmal eine korrekt.

PHP time() Funktion gibt nicht die Systemzeit, wie die meisten Leute glauben, aber es die PHP-Lokalzeit zurückkehren, in der Regel mit date.timezone in php.ini gesetzt, oder setzen Sie mit date_default_timezone_set() in einem Skript.

Zum Beispiel wurde in einem meiner Server PHP-Zeit auf Europe/Rome und Systemzeit auf UTC gesetzt. Ich hatte einen Unterschied von einer Stunde zwischen Systemzeit und PHP-Zeit.

Ich gebe Ihnen eine Lösung, die für Linux funktioniert, ich weiß nicht für Windows. Unter Linux ist die Systemzeitzone auf /etc/timezone eingestellt. Nun, dies ist normalerweise außerhalb meiner erlaubten open_basedir Einstellung, aber Sie können :/etc/timezone zu Ihrer Liste hinzufügen, um in der Lage zu sein, die Datei zu lesen.

Dann können Sie zusätzlich zu den Skripts, die die Systemzeit abrufen möchten, eine Bibliotheksfunktion aufrufen, die die Zeitzone des Skripts auf die Systemzeitzone einstellt. Ich nehme an, dass diese Funktion ein Teil der Klasse ist, so dass ich statisch:

static function setSystemTz() { 
    $systemTz = trim(file_get_contents("/etc/timezone")); 
    if ($systemTz == 'Etc/UTC') $systemTz = 'UTC'; 
    date_default_timezone_set($systemTz); 
} 

Um die Sache noch schlimmer in PHP 5.3.3 ‚Etc/UTC‘ machen nicht erkannt wird, während ‚UTC‘ ist, so dass ich musste ein if hinzufügen, um das zu beheben.

Jetzt können Sie glücklich anrufen time() und es wird Ihnen wirklich die Systemzeit geben. Ich habe es getestet, weil ich es für mich selbst brauchte, deshalb habe ich diese Frage jetzt gefunden.

0

versuchen diese:

$time=date("h:i:s A", strtotime("now"-14)); 
echo $time; 

Sie sich die Zeit, indem die Anzahl einstellen 14 oben.

0

Um die aktuelle Uhrzeit Ihres Systems zu erhalten, müssen Sie in Ihrer php.ini-Datei den korrekten date.timezone einstellen. Wenn Sie zum Beispiel aus Indien sind dann würden Sie schreiben:

date.timezone = Asia/Calcutta 

Für Deutschland wäre es:

date.timezone = Europe/Berlin 

Nachdem Sie das getan, date("Y-m-d H:i:s") wird Ihre aktuelle Zeit. Um Ihre Zeitzone zu bekommen, schauen Sie sich die list of timezones supported by PHP an.

0

Dies ist die einfachste und sicherste Weg, es zu tun:

$sys_timestamp = strtotime(exec("date")); 

Versuchen wir es nicht mit PHP zu fälschen, lassen Sie uns nur die reale sys Zeit bekommen;)

(wird auf jede Arbeit Unix-basiertes System)

0

Sie können die aktuelle Ortszeit via Javascript unten setzen und es in eine beliebige PHP-Variable setzen.

<script> 

     // For 24 hours  

     var ct = new Date(); 
     var hr = ct.getHours(); 
     var mt = ct.getMinutes(); 
     if (mt < 10) { 
      mt = "0" + mt; 
     } 
     document.write("<b>" + hr + ":" + mt + " " + "</b>");  


     // For 12 hours (AM/PM) 

     var ct = new Date(); 
     var hr = ct.getHours(); 
     var mt = ct.getMinutes(); 

     var ampm = "AM"; 

     if (hr >= 12) { 
      ampm = "PM"; 
      hr = hr - 12; 
     } 
     if (hr == 0) { 
      hr = 12; 
     } 
     if (mt < 10) { 
      mt = "0" + mt; 
     } 

     document.write("<b>" + hr + ":" + mt + " " + ampm + "</b>"); 

    </script> 
Verwandte Themen