Tach!
Also abgesehen von vielen anderen Dingen, die ich nicht verstehe ... erkläre mir bitte zumindest Folgendes:
mktime() brauchst du in dem Fall nicht.
Na das zeig mir mal bitte!
Kann sein, dass ich das fehlgelesen hatte. Mit "UTC Timestamp" meintest du vermutlich ein formatiertes Datum, ich hab das als Unix-Timestamp gelesen. Auf letzteren kannst du date()/gmdate() direkt anwenden, das formatierte Datum muss natürlich erst wieder in einen Timestamp gebracht werden, sei es kleingehackt und mit (gm)mktime() oder geparst mit strtotime().
_Ohne_ den ganzen Umwandlungs-Schnickschnack, also wenn ich die gespeicherten UTC-Zeitpunkte 1:1 ausgeben möchte, mache ich das so:
[Anzeige im Default-Format von MySQL]
Jetzt brauche ich ein SELECT-Query und eine php-Verarbeitung, damit beim Enduser wieder ein 16:30 Uhr ausgegeben wird, wenn ich in php die Zeitzone per 'date_default_timezone_set('Europe/Berlin');
' setze.
Für PHP braucht es einen Unix-Timestamp. Den bekommen wir auf zwei Wegen. Der erst ist, ihn von MySQL erzeugen zu lassen, der zweite ist, PHP zu beauftragen.
MySQL kennt ja UNIX_TIMESTAMP(), was wir nehmen können. Allerdings liegt nun der DATETIME-Wert in UTC vor und nicht in irgendeiner Lokalzeit. UNIX_TIMESTAMP() jedoch beachtet die Lokalzeit, also muss unbedingt die Zeitzone auf UTC stehen, beziehungsweise auf einer Differenz von +0:00 oder -0:00 (ohne Vorzeichen geht es nicht), was du mit dem bereits bekannten SET time_zone='+0:00' hinbekommst. In das abfragende SELECT-Statement baust du nun UNIX_TIMESTAMP(dein_datetime_feld) ein. (Ausführlich: SELECT id
,UNIX_TIMESTAMP(datum
),name
FROM tabelle
)
Jetzt hast du in PHP einen schönen Integerwert vorliegen. Egal welche Zeitzone eingestellt ist, mit gmdate() kannst du in dir als UTC-Zeit ausgeben lassen, mit date() in der aktuellen Zeitzone.
Für den zweiten Weg hast du eine funktionierende Lösung in deiner 20:51-Antwort stehen. Dabei musst du immer vor dem Parsen von einem oder mehreren formatierten DATETIME-Werten die Zeitzone auf UTC stellen und zum Ausgeben auf Lokalzeit. Das ist umständlicher, als einmalig am Script-Start die lokale Zone zu setzen. Ich würde deshalb den ersten Weg nehmen, denn dann braucht es nur einmalig SET time_zone='+0:00' nach dem Verbindungsaufbau und einmal date_default_timezone_set(...) am Scriptanfang;
Ich weiß nicht mehr, welche Kombination aus MYSQL Zeitfunktion und php Zeitfunktion ich jetzt noch _nicht_ ausprobiert habe. Ich bekomme entweder Fehlermeldungen oder Zeiten, die alles andere sind als die erwarteten.
Ich nehme an, du hast versucht, den formatierten DATETIME-Wert selbständig zu zerkleinern und an mktime() zu verfüttern. Das ergibt nur dann den korrekten Unix-Timestamp, wenn die PHP-Zeitzone auf UTC steht. Oder du nimmst gmmktime(), dann kann sie stehen wie sie will. Ausgeben geht mit date()/gmdate() wie schon beschrieben.
dedlfix.