2008-10-11 20 views

Antwort

59
date('Z'); 

kehrt der UTC-Offset arbeiten.

+1

Danke. Leider erfordert PHP, dass Sie date_default_timezone_set() aufrufen. Wenn Sie dies auf GMT einstellen, werden Ihre Daten aus einer Datenbank immer noch in Ortszeit sein, aber Datum ('Z') wird Null zurückgeben. Wenn Sie es auf die Zeitzone des Servers einstellen, können Sie auch den Offset des Servers von GMT in einer Include-Datei fest codieren. Es ist unglaublich, dass es keinen direkten Weg dafür gibt. EDIT: Ich entdeckte, dass Sie date_default_timezone_set (date_default_timezone_get()) tun können. Wie scheußlich! – Oscar

+0

Datum ('Z') gibt den GMT-Offset in Sekunden zurück – Dahomz

+0

Das ergibt 0. – Adry

16

timezone_offset_get()

$this_tz_str = date_default_timezone_get(); 
$this_tz = new DateTimeZone($this_tz_str); 
$now = new DateTime("now", $this_tz); 
$offset = $this_tz->getOffset($now); 

Ungeprüfte, sollte aber in Sekunden

+0

Nützlich, wenn Sie die Klasse Datetime in PHP verwenden 5. Aber ich bin nicht. –

-2

date("Z") wird den UTC-Offset relativ zur Zeitzone des Servers und nicht zur Zeitzone des Benutzers zurückgeben. Um die Maschinenzeitzone des Benutzers zu erhalten, können Sie die Javascript getTimezoneOffset() Funktion verwenden, die den Zeitunterschied zwischen UTC-Zeit und Ortszeit in Minuten zurückgibt.

<script type="text/javascript"> 
    d = new Date(); 
    window.location.href = "page.php?offset=" + d.getTimezoneOffset(); 
</script> 

Und in page.php die Ihre PHP-Code enthält, können Sie tun, was Sie mit diesem Offset-Wert soll. Oder anstatt auf eine andere Seite umzuleiten, können Sie den Offset-Wert je nach Bedarf über Ajax an Ihr PHP-Skript senden.

+1

OP explizit gefragt * "relativ zur aktuellen (System-) Zeitzone?" * – Madbreaks

+1

OP hat die PHP-Lösung gefragt, nicht JS –

10

Ich habe eine etwas modifizierte Version von dem, was Oscar getan hat.

date_default_timezone_set('America/New_York'); 
$utc_offset = date('Z')/3600; 

Dies gab mir den Offset von meiner Zeitzone, EST, zu UTC, in Stunden.

Der Wert von $ utc_offset war -4.

11

Echodatum ('P'); // Ausgabe: etwas +02: 00 oder -04: 00

1

Dies ist die gleiche JavaScript date.getTimezoneOffset() Funktion:

<?php 
echo round(date('Z')/-60,2); 
?> 
+0

['date (' Z ') '] (http://php.net/manual/en/function.date.php) ist der *« Zeitzonenversatz in Sekunden. »* Das Minuszeichen sollte bleiben ... Dividiere durch' 60'. Nicht mit '-60' Dann wird der Zeitzonen-Offset des Servers ausgegeben. OP wollte (2008) den Offset des lokalen Benutzers mit dem Wert vergleichen, über den Sie sprechen. –

+0

@LouysPatriceBessette 'getTimezoneOffset()' Funktion in Javascript gibt genau diesen Wert (-180). –

+0

Das gilt für [JavaScript getTimezoneOffset()] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getTimezoneOffset) ... Und es ist in Minuten statt Sekunden. PHP date macht diese absolute Inversion nicht. –

Verwandte Themen