Was ist der einfachste Weg, um den UTC-Offset in PHP relativ zur aktuellen (System-) Zeitzone zu erhalten?
UTC-Offset in PHP
date('Z');
gibt den UTC-Offset in Sekunden zurück.
-
Vielen Dank. Leider erfordert PHP, dass Sie date_default_timezone_set() aufrufen. Wenn Sie dies auf GMT einstellen, sind Ihre Daten aus einer Datenbank immer noch in Ortszeit, aber date(‘Z’) gibt Null zurück. Wenn Sie es auf die Zeitzone des Servers setzen, können Sie den Offset des Servers von GMT genauso gut in einer Include-Datei fest codieren. Es ist unglaublich, dass es keinen einfachen Weg gibt, dies zu tun. BEARBEITEN: Ich habe entdeckt, dass Sie date_default_timezone_set(date_default_timezone_get()) tun können. Wie dumm!
– Oskar
31. Juli 2012 um 21:25 Uhr
-
date(‘Z’) gibt den GMT-Offset in Sekunden zurück
– Dahomz
2. Mai 2017 um 12:29 Uhr
-
Das gibt 0 zurück.
– Ein trockenes
21. Februar 2018 um 17:14 Uhr
-
Adry, sieht so aus, als wärst du in UTC (-;
– sij
26. August 2019 um 20:02 Uhr
Tuhin Bepari
// will output something like +02:00 or -04:00
echo date('P');
-
In Betracht ziehen:
echo date("O");
– DanimalReks
10. Dezember 2021 um 13:54 Uhr
-
@DanimalReks tut mir leid, aber was sollte deine Frage bedeuten?
– druganow
20. Dezember 2021 um 7:14 Uhr
$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);
Ungetestet, sollte aber funktionieren
-
Nützlich, wenn Sie die DateTime-Klasse in PHP 5 verwenden. Aber ich nicht.
– Adam Ernst
11. Oktober 2008 um 1:36 Uhr
Ich habe eine leicht modifizierte Version dessen gemacht, was Oscar gemacht 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.
زياد
Dies ist dasselbe JavaScript date.getTimezoneOffset()
Funktion:
<?php
echo date('Z')/-60;
?>
-
date('Z')
ist der «Zeitzonenverschiebung in Sekunden.» Das Minuszeichen sollte bleiben … Teilen durch60
. Nicht von-60
Dann wird der Zeitzonenoffset des Servers ausgegeben. OP wollte (2008) den Offset des lokalen Benutzers mit diesem Wert vergleichen, von dem Sie sprechen.– Louys Patrice Bessette
29. Mai 2017 um 21:55 Uhr
-
@LouysPatriceBessette
getTimezoneOffset()
Funktion in Javascript gibt genau diesen Wert (-180).– زياد
29. Mai 2017 um 22:00 Uhr
-
Das gilt für JavaScript getTimezoneOffset()… Und das in Minuten statt Sekunden. PHP date führt diese absolute Wertinversion nicht durch.
– Louys Patrice Bessette
29. Mai 2017 um 22:03 Uhr
-
ich würde sagen
round( date('Z')/-60 , 2);
(Dezimalgenauigkeit) für Zeitzonen-Offsets wie UTC+8:45 wie Australiens Cetral Western. 😉 Ich habe positiv abgestimmt … Aber mehr Erklärungen wären großartig … Es ist Ihre Antwort.– Louys Patrice Bessette
29. Mai 2017 um 22:24 Uhr
-
Nur damit Sie es wissen … Ich habe Ihre Antwort in der Überprüfungswarteschlange “Verspätete Antwort” erhalten. Fragen und Antworten werden hier streng überprüft 😉 Je vollständiger und relevanter Ihre Antwort ist, desto mehr Repräsentanten. du wirst gewinnen. 😉
– Louys Patrice Bessette
29. Mai 2017 um 22:29 Uhr
Einfach können Sie dies tun:
//Object oriented style
function getUTCOffset_OOP($timezone)
{
$current = timezone_open($timezone);
$utcTime = new \DateTime('now', new \DateTimeZone('UTC'));
$offsetInSecs = $current->getOffset($utcTime);
$hoursAndSec = gmdate('H:i', abs($offsetInSecs));
return stripos($offsetInSecs, '-') === false ? "+{$hoursAndSec}" : "-{$hoursAndSec}";
}
//Procedural style
function getUTCOffset($timezone)
{
$current = timezone_open($timezone);
$utcTime = new \DateTime('now', new \DateTimeZone('UTC'));
$offsetInSecs = timezone_offset_get( $current, $utcTime);
$hoursAndSec = gmdate('H:i', abs($offsetInSecs));
return stripos($offsetInSecs, '-') === false ? "+{$hoursAndSec}" : "-{$hoursAndSec}";
}
$timezone="America/Mexico_City";
echo "Procedural style<br>";
echo getUTCOffset($timezone); //-06:00
echo "<br>";
echo "(UTC " . getUTCOffset($timezone) . ") " . $timezone; // (UTC -06:00) America/Mexico_City
echo "<br>--------------<br>";
echo "Object oriented style<br>";
echo getUTCOffset_OOP($timezone); //-06:00
echo "<br>";
echo "(UTC " . getUTCOffset_OOP($timezone) . ") " . $timezone; // (UTC -06:00) America/Mexico_City
-
date('Z')
ist der «Zeitzonenverschiebung in Sekunden.» Das Minuszeichen sollte bleiben … Teilen durch60
. Nicht von-60
Dann wird der Zeitzonenoffset des Servers ausgegeben. OP wollte (2008) den Offset des lokalen Benutzers mit diesem Wert vergleichen, von dem Sie sprechen.– Louys Patrice Bessette
29. Mai 2017 um 21:55 Uhr
-
@LouysPatriceBessette
getTimezoneOffset()
Funktion in Javascript gibt genau diesen Wert (-180).– زياد
29. Mai 2017 um 22:00 Uhr
-
Das gilt für JavaScript getTimezoneOffset()… Und das in Minuten statt Sekunden. PHP date führt diese absolute Wertinversion nicht durch.
– Louys Patrice Bessette
29. Mai 2017 um 22:03 Uhr
-
ich würde sagen
round( date('Z')/-60 , 2);
(Dezimalgenauigkeit) für Zeitzonen-Offsets wie UTC+8:45 wie Australiens Cetral Western. 😉 Ich habe positiv abgestimmt … Aber mehr Erklärungen wären großartig … Es ist Ihre Antwort.– Louys Patrice Bessette
29. Mai 2017 um 22:24 Uhr
-
Nur damit Sie es wissen … Ich habe Ihre Antwort in der Überprüfungswarteschlange “Verspätete Antwort” erhalten. Fragen und Antworten werden hier streng überprüft 😉 Je vollständiger und relevanter Ihre Antwort ist, desto mehr Repräsentanten. du wirst gewinnen. 😉
– Louys Patrice Bessette
29. Mai 2017 um 22:29 Uhr
Jesse יִשַׁי
Dadurch wird etwas ausgegeben, das folgendermaßen formatiert ist: +0200
oder -0400
:
echo date('O');
Dies kann für eine ordnungsgemäße Verwendung nützlich sein RSS RFC822-Format
<pubDate>Sat, 07 Sep 2002 00:00:01 -0500</pubDate>
GMT-Offsets (wie diese) sollten keinen Doppelpunkt verwenden (+02:00
aus date('P');
).
Und obwohl es für RSS RFC833 akzeptabel ist, wollen wir keine Ausgabe wie PDT
und CST
weil diese willkürlich sind und “CST” viele Dinge bedeuten kann:
- KST = Zentrale Standardzeit
- KST = Chinesische Standardzeit
- KST = Kuba Normalzeit