UTC in lokale Zeit transformieren

Kalito

Erfahrenes Mitglied
Hallo,

ich hole mir aus der Datenbank einen aktuellen Datetime im Format ('Y-m-d H:is:). Nun ist das ganze in UTC. Ich brauche die Zeit aber in der lokalen Zeitzone (Europe/Berlin). Sprich in der DB steht 18:00Uhr und php muss 19:00h ausgeben (Winterzeit) bzw. 20:00Uhr Sommerzeit. Wenn ich aber mit der DATETIME-Klasse die Zeitzone setze, wird 17:00h ausgegeben.
Könnt Ihr mir bitte helfen.

Gruß, Patrick
 
Hi,

wenns in der DB schonmal generell als UTC gespeichert ist, ist das schonmal gut.
Hast du einen Beispielcode zur Hand?

Grüsse,
BK

// Edit: Ich nehme für meine Datumsfelder wenns geht nur noch Timestmap. Somit ist der Select je nach Zeitzone sehr einfach. Hier ein Beispiel, der Server läuft mit Standard UTC:

Code:
MariaDB [test]> create table test (dt datetime, ts timestamp);  
Query OK, 0 rows affected (0.01 sec)  

MariaDB [test]> insert into test values (now(), now());
Query OK, 1 row affected (0.00 sec)

MariaDB [test]> select * from test;
+---------------------+---------------------+
| dt                  | ts                  |
+---------------------+---------------------+
| 2016-01-22 13:52:54 | 2016-01-22 13:52:54 |
+---------------------+---------------------+
1 row in set (0.00 sec)

MariaDB [test]> set session time_zone="+01:00";
Query OK, 0 rows affected (0.00 sec)

MariaDB [test]> select * from test;
+---------------------+---------------------+
| dt                  | ts                  |
+---------------------+---------------------+
| 2016-01-22 13:52:54 | 2016-01-22 14:52:54 |
+---------------------+---------------------+
1 row in set (0.00 sec)
 
Zuletzt bearbeitet:
Hallo,

ich bekomme die Zeit über eine API-Schnittstelle. Diese gibt mir folgendes aus:

PHP:
public function get_deadline()
{
//Gibt 2016-01-27 17:00:00.000000 zurück
$apireturn = $this->api->get_next_deadline();

//das entspricht: 1453910400
return strtotime($apireturn);
}

Nun habe ich an meiner eigentlichen Stelle im Code eine switch-Anweisung, welches diese Zeit weiter verarbeiten soll. Dieser hier ist jetzt nur Beispielhaft:
PHP:
$date = $this->transform_deadline($part)
{
switch ($part) {
            case 'class': $time = new \DateTime;
                            $time->createFromFormat('H:i', $date);
                            $time->setTimezone(new \DateTimeZone('Europe/Berlin'));
                            $format = $time->format('H:i');
                    break;
            case 'default': date_default_timezone_set('Europe/Berlin');$format = date('H:i', $date);break;
            case 'db': $format = date('H:i', $date);break;
            case 'original' : $format = $date;break;
        }
      
        return $format;
}

Nun habe ich alles 4 einmal durchprobiert
PHP:
echo $this->transform_deadline('original'); //1453910400
echo $this->transform_deadline('db'); //17:00
echo $this->transform_deadline('class'); //16:55
echo $this->transform_deadline('default'); //17:00

Eigentlich muss ich aber den Wert 18:00h bekommen. Wo ist hier mein Denkfehler?

Gruß Patrick
 
hab es herausgefunden.

server läuft in einer anderen Zeitzone als die DB und ich muss dem Server vorher sagen, dass die Zeit bereits UTC ist
PHP:
$date = new \DateTime($mydate,new DateTimeZone('UTC'));
        $date->setTimezone(new DateTimeZone('Europe/Berlin'));
 

Neue Beiträge

Zurück