UTC-Offset in PHP

Lesezeit: 4 Minuten

Was ist der einfachste Weg, um den UTC-Offset in PHP relativ zur aktuellen (System-) Zeitzone zu erhalten?

  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

Benutzer-Avatar
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

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);

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.

Benutzer-Avatar
زياد

Dies ist dasselbe JavaScript date.getTimezoneOffset() Funktion:

<?php
echo date('Z')/-60;
?>

  • date('Z') ist der «Zeitzonenverschiebung in Sekunden.» Das Minuszeichen sollte bleiben … Teilen durch 60. 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 durch 60. 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


Benutzer-Avatar
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:

1311520cookie-checkUTC-Offset in PHP

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy