Angenommen, ich habe ein UTC-Datum und eine Uhrzeit wie 2011-04-27 02:45 und ich möchte es in meine Ortszeit umwandeln, die Amerika/New_York ist.
Drei Fragen:
1.) Mein Code unten könnte das Problem lösen, würden Sie zustimmen?
<?php
date_default_timezone_set('America/New_York'); // Set timezone.
$utc_ts = strtotime("2011-04-27 02:45"); // UTC Unix timestamp.
// Timezone offset in seconds. The offset for timezones west of UTC is always negative,
// and for those east of UTC is always positive.
$offset = date("Z");
$local_ts = $utc_ts + $offset; // Local Unix timestamp. Add because $offset is negative.
$local_time = date("Y-m-d g:i A", $local_ts); // Local time as yyyy-mm-dd h:m am/pm.
echo $local_time; // 2011-04-26 10:45 PM
?>
2.) Aber passt sich der Wert von $offset automatisch an die Sommerzeit (DST) an?
3.) Wenn nicht, wie soll ich meinen Code so anpassen, dass er sich automatisch an die Sommerzeit anpasst?
Vielen Dank 🙂
date("Z") gibt immer die Zeitzone zurück GMT +0000die keine Korrektur für DST hat.
– Marcel Korpel
27. April 2011 um 15:37 Uhr
Treffynnon
Dies wird tun, was Sie wollen, indem Sie PHPs native verwenden Terminzeit und DateTimeZone Klassen:
Nach einigen Experimenten zwischen Zeitzonen mit und ohne Sommerzeit Ich habe festgestellt, dass dies die Sommerzeit berücksichtigt. Dieselbe Konvertierung mit meiner obigen Methode ergibt dieselbe resultierende Zeit.
Das ist auch der Grund, warum PHP ungefähr 7 verschiedene Zeitzonen für den Bundesstaat Indiana hat, um all ihre verrückten unterschiedlichen DST-Regeln zu berücksichtigen: php.net/manual/en/timezones.php
– Jimmy Sawczuk
27. April 2011 um 16:28 Uhr
Alle: Ich schätze wirklich die Hilfe aller. Treffynnon: Danke! Ich werde es versuchen. Mein Code sieht im Vergleich zu deinem so primitiv aus, lol. War ich bei meinem Versuch überhaupt nah dran? Danke noch einmal!
– John
27. April 2011 um 16:35 Uhr
@John Freut mich, dass es dir gefällt. Ich bin mir bei Ihrem Code nicht sicher, da ich ihn noch nie so mit dem prozeduralen PHP-Stil geschrieben habe.
– Treffynnon
27. April 2011 um 16:39 Uhr
@Treffynnon Um Star Wars zu zitieren: Es ist ein älterer Code, aber überprüft.
– Mr_Chimp
30. September 2014 um 12:36 Uhr
Ich weiß, dass dies ein alter Beitrag ist, aber es gibt eine weitere Zeile, die Sie hinzufügen müssen, um die richtige Zeit zu erhalten.
Vor der Konvertierung in die Ortszeit müssen Sie die Standardzeitzone wie folgt auf UTC einstellen (wenn es sich um die Zeitzone der von Ihnen angegebenen Zeit handelt):
function GmtTimeToLocalTime($time) {
date_default_timezone_set('UTC');
$new_date = new DateTime($time);
$new_date->setTimeZone(new DateTimeZone('America/New_York'));
return $new_date->format("Y-m-d h:i:s");
}
date_default_timezone_set('America/New_York'); // Set timezone.
$utc_ts = strtotime("2011-04-27 02:45"); // UTC Unix timestamp.
Unmittelbar nach dieser Ausführung enthält $utc_ts die Ortszeit. PHP verarbeitet die Sommerzeit selbst.
=H=
Dadurch wird die Zeit zwischen Zeitzonen nicht konvertiert. Es erstellt nur einen neuen Unix-Zeitstempel für 2011-04-27 02:45. Die Zeitzone in Ihrem Beispiel macht in diesem Fall nichts und ist belanglos.
– Treffynnon
27. April 2011 um 15:56 Uhr
Es gibt keinen UTC-Zeitstempel, da der Zeitstempel nicht von der Zeitzone beeinflusst wird. Sie können jede Zeitzone in der ersten Zeile einstellen und $utc_ts gibt den gleichen Wert zurück. Dieser Code tut nichts anderes, als die Zeitzone für die zukünftige Verwendung im Skript festzulegen, er wirkt sich nicht auf den Zeitstempel selbst aus.
– Wh1T3h4Ck5
27. April 2011 um 17:06 Uhr
Ich werde die Antwort von Hasin Hayder verbessern
date_default_timezone_set('America/New_York'); // Set timezone.
$utc_ts = strtotime("2011-04-27 02:45 UTC"); // UTC Unix timestamp.
echo date('Y-m-d H:i:s a T', $utc_ts);
Es sollte ausgegeben werden
2011-04-26 10:45:00 pm EDT
Der Unterschied besteht darin, die Quellzeitzone hinzuzufügen. strtotime() akzeptiert auch die Zeitzone! :p
<?php
$time = new DateTime('now', new DateTimeZone(date_default_timezone_get()));
$timeZone = $time->format('P');//Asia/Kolkata ... GET TimeZone From PHP ini Setting
$tm_datetime="08/08/2021 12:00 AM";
$tm_tz_from = $timeZone;
$tm_tz_to = 'UTC';
$tm_format="Ymd\THis\Z";
$dt = new DateTime($tm_datetime, new DateTimeZone($tm_tz_from));
$dt->setTimeZone(new DateTimeZone($tm_tz_to));
$utc_time_from =$dt->format("H:i:s");
echo "UTC TIME".$utc_time_from;
?>
Bitte fügen Sie Ihrem Snippet eine Erklärung hinzu, damit es hilfreich ist
– Weg
9. August 2021 um 12:51 Uhr
Bitte fügen Sie Ihrem Snippet eine Erklärung hinzu, damit es nützlich ist
date("Z")
gibt immer die Zeitzone zurückGMT +0000
die keine Korrektur für DST hat.– Marcel Korpel
27. April 2011 um 15:37 Uhr