Eine weitere Antwort, die mir leicht fällt:
echo date('c');
// 2015-07-27T00:00:00+02:00
Dies ist ISO 8601 Datum (hinzugefügt in PHP 5) die MySQL verwendet
Modifier
MySQL 5.7 erlaubt standardmäßig keine Zeitzone in der Datetime. Sie können den Fehler mit SQL_MODE=ALLOW_INVALID_DATES
. Weitere Einzelheiten finden Sie in der Antwort hier: https://stackoverflow.com/a/35944059/2103434 . Das bedeutet aber auch, dass die Zeitzone beim Speichern in der Datenbank verloren geht!
Standardmäßig verwendet MySQL die Zeitzone des Systems, und solange PHP die die gleiche Zeitzone sollte es dir gut gehen. In meinem Fall CET / UTC+2.
Das bedeutet, dass ich, wenn ich ein 2015-07-27T00:00:00+02:00
zur Datenbank, nur 2015-07-27T00:00:00
gespeichert werden (aber das ist die korrekte Ortszeit!).
Wenn ich die Zeit wieder in PHP lade,
$importedDate = new \DateTime('2015-07-27T00:00:00')
wird er automatisch annehmen, dass es sich um +02:00
Zeitzone, da dies die Standardeinstellung ist. Beim Drucken wird sie wieder korrekt sein:
echo $importedDate->format('c');
// 2015-07-27T00:00:00+02:00
Um auf Nummer sicher zu gehen, verwenden Sie auf dem Server immer UTC, geben Sie es in MySQL und PHP an und konvertieren Sie es erst dann in das Gebietsschema des Benutzers, wenn das Datum angezeigt wird:
date_default_timezone_set('UTC');
$importedDate = new \DateTime('2015-07-27T00:00:00+02:00');
echo $importedDate->format('c');
// 2015-07-27T00:00:00+02:00
$importedDate->setTimezone(new \DateTimeZone("America/New_York"));
echo $importedDate->format('c');
// 2015-07-26T18:00:00-04:00