Zeitzonenumrechnung in php

Lesezeit: 5 Minuten

Zeitzonenumrechnung in php
Raki

Kann jemand eine einfache Methode zum Konvertieren von Datum und Uhrzeit in verschiedene Zeitzonen in PHP vorschlagen?

Zeitzonenumrechnung in php
Gordon

Sie können dafür das datetime-Objekt oder deren Funktionsaliase verwenden:

Beispiel (Aus dem PHP-Handbuch gekürzt)

date_default_timezone_set('Europe/London');

$datetime = new DateTime('2008-08-03 12:35:23');
echo $datetime->format('Y-m-d H:i:s') . "\n";
$la_time = new DateTimeZone('America/Los_Angeles');
$datetime->setTimezone($la_time);
echo $datetime->format('Y-m-d H:i:s');

Bearbeiten Sie in Bezug auf Kommentare

aber ich kann diese Methode nicht verwenden, da ich das Datum in verschiedenen Zeitzonen anzeigen muss, wenn sich der Benutzer von verschiedenen Standorten aus anmeldet

Das ist kein Problem. Wenn sich ein Benutzer anmeldet, bestimmen Sie seine Zeitzone und setzen sie wie gezeigt auf Ihr DateTime-Objekt. Ich verwende einen ähnlichen Ansatz in einem meiner Projekte und es funktioniert wie ein Zauber.

In der Datenbank muss ich die Daten in einer einzelnen Zeitzone abrufen, nur dann kann sie richtig verarbeitet werden

Sie speichern die Zeit entweder als Zeitstempel oder als Datumszeit in einer Zeitzone. Wenn Sie ein DateTime-Feld abfragen, konvertieren Sie entweder die Zeit in einem DateTime-Objekt in diese Zeitzone oder – wenn Ihre Datenbank dies unterstützt – fragen Sie mit der ausgewählten Zeitzone ab.

  • danke Gordon, aber ich kann diese Methode nicht verwenden, da ich das Datum in verschiedenen Zeitzonen anzeigen muss, wenn sich der Benutzer von verschiedenen Standorten aus anmeldet

    – Raki

    24. März 2010 um 6:25 Uhr


  • @raki: also gleich nachdem der Benutzer angemeldet ist – richten Sie date_default_timezone_set() mit der vom Benutzer ausgewählten Zeitzone ein.

    – zerkms

    24. März 2010 um 6:44 Uhr


  • das ist auch nicht möglich.. weil.. in der datenbank muss ich die daten in jeder einzelnen zeitzone bekommen, nur dann kann es richtig verarbeitet werden

    – Raki

    24. März 2010 um 6:51 Uhr

  • In der Datenbank speicherst du alles in GMT. Entweder das, oder es wird zu einem unüberschaubaren Chaos.

    – Jaco

    24. März 2010 um 10:08 Uhr

  • all dies ist komplizierter als es sein muss. Wenn ich die Standardzeitzone einstelle, dann wird das Bit date(‘Ymd H:i:s’), das ich tue, um die erstellten/aktualisierten Zeiten zu erhalten, in der Zeitzone des Benutzers sein. Also muss ich sie in UTC umwandeln. Viele Änderungen überall, um sicherzustellen, dass ich die Konvertierung nicht zweimal mache. Das ist wirklich eine Impedanzfehlanpassung.

    – Kinjal Dixit

    24. November 2012 um 6:22 Uhr

Eine noch einfachere Methode sieht so aus:

date_default_timezone_set('Europe/London'); // your user's timezone
$my_datetime="2013-10-23 15:47:10";
echo date('Y-m-d H:i:s',strtotime("$my_datetime UTC"));

Wie beschrieben im PHP-Handbuchstrtotime() akzeptiert auch eine Zeitzone, Sie müssen sie nur an Ihre Datetime anhängen.

Ich empfehle Ihnen, alle Datumsangaben in UTC zu speichern, da Sie auf diese Weise keine Probleme mit der Sommerzeit haben.

1646927648 52 Zeitzonenumrechnung in php
Saada

Das hat bei mir funktioniert und es ist auch ziemlich sauber!

function convert_to_user_date($date, $format="n/j/Y g:i A", $userTimeZone="America/Los_Angeles", $serverTimeZone="UTC")
{
    try {
        $dateTime = new DateTime ($date, new DateTimeZone($serverTimeZone));
        $dateTime->setTimezone(new DateTimeZone($userTimeZone));
        return $dateTime->format($format);
    } catch (Exception $e) {
        return '';
    }
}

function convert_to_server_date($date, $format="n/j/Y g:i A", $userTimeZone="America/Los_Angeles", $serverTimeZone="UTC")
{
    try {
        $dateTime = new DateTime ($date, new DateTimeZone($userTimeZone));
        $dateTime->setTimezone(new DateTimeZone($serverTimeZone));
        return $dateTime->format($format);
    } catch (Exception $e) {
        return '';
    }
}

//example usage
$serverDate = $userDate="2014-09-04 22:37:22";
echo convert_to_user_date($serverDate);
echo convert_to_server_date($userDate);

1644352449 543 Font Awesome Symbol im
Skeets

Keine dieser Antworten hat bei mir funktioniert (ich habe das Ausprobieren von Code übersprungen, der übermäßig sperrig war). Ich finde es auch seltsam, die Standardzeitzone nur für eine einzelne Konvertierung zu ändern.

Hier ist meine Lösung:

function changeTimeZone($dateString, $timeZoneSource = null, $timeZoneTarget = null)
{
  if (empty($timeZoneSource)) {
    $timeZoneSource = date_default_timezone_get();
  }
  if (empty($timeZoneTarget)) {
    $timeZoneTarget = date_default_timezone_get();
  }

  $dt = new DateTime($dateString, new DateTimeZone($timeZoneSource));
  $dt->setTimezone(new DateTimeZone($timeZoneTarget));

  return $dt->format("Y-m-d H:i:s");
}

Um also in den Serverstandard zu konvertieren, würden Sie nur eine Zeitzone übergeben:

changeTimeZone("2016-10-24 16:28", "Asia/Tokyo");

Um vom Serverstandard zum Benutzer zu konvertieren, würden Sie den 2. Parameter null oder leer lassen:

changeTimeZone("2016-10-24 16:28", "", "Asia/Tokyo");

Und um zwischen 2 Zeitzonen zu wechseln, die nichts mit der Standardeinstellung zu tun haben, würden Sie 2 Zeitzonen angeben:

changeTimeZone("2016-10-24 16:28", "America/New_York", "Asia/Tokyo");

Zeitzonenumrechnung in php
Eduard Marcolino

UTC zu lokal:

<?php
$datetime = date("Y-m-d H:i:s");
$utc = new DateTime($datetime, new DateTimeZone('UTC'));
$utc->setTimezone(new DateTimeZone('America/Sao_Paulo'));
echo $utc->format('Y-m-d H:i:s');

?>

1646927649 629 Zeitzonenumrechnung in php
esazzad

DateTime::setTimezone — date_timezone_set — Legt die Zeitzone für das DateTime-Objekt fest

Objektorientierter Stil

<?php
$date = new DateTime('2000-01-01', new DateTimeZone('Pacific/Nauru'));
echo $date->format('Y-m-d H:i:sP') . "\n";

$date->setTimezone(new DateTimeZone('Pacific/Chatham'));
echo $date->format('Y-m-d H:i:sP') . "\n";
?>

Verfahrensstil

<?php
$date = date_create('2000-01-01', timezone_open('Pacific/Nauru'));
echo date_format($date, 'Y-m-d H:i:sP') . "\n";

date_timezone_set($date, timezone_open('Pacific/Chatham'));
echo date_format($date, 'Y-m-d H:i:sP') . "\n";
?>

Die obigen Beispiele werden ausgegeben:

2000-01-01 00:00:00+12:00
2000-01-01 01:45:00+13:45

1646927649 521 Zeitzonenumrechnung in php
Brian Tompsett – 汤莱恩

// Convert date from one zone to another..
/* 
$zone_from='Asia/Kolkata';

$zone_to='America/Phoenix';

date_default_timezone_set($zone_from);

$convert_date="2016-02-26 10:35:00";

echo $finalDate=zone_conversion_date($convert_date, $zone_from, $zone_to);

*/
function zone_conversion_date($time, $cur_zone, $req_zone)
{   
    date_default_timezone_set("GMT");
    $gmt = date("Y-m-d H:i:s");
    
    date_default_timezone_set($cur_zone);
    $local = date("Y-m-d H:i:s");
  
    date_default_timezone_set($req_zone);
    $required = date("Y-m-d H:i:s");
    
    /* return $required; */
    $diff1 = (strtotime($gmt) - strtotime($local));
    $diff2 = (strtotime($required) - strtotime($gmt));

    $date = new DateTime($time);
    $date->modify("+$diff1 seconds");
    $date->modify("+$diff2 seconds");

    return $timestamp = $date->format("Y-m-d H:i:s");
}

988370cookie-checkZeitzonenumrechnung in php

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

Privacy policy