0Pricing
PHP Academy · Lektion

Zeitzonen in PHP

Arbeiten Sie mit mehreren Zeitzonen mithilfe von DateTimeZone und date_default_timezone_set.

Zeitzonen in PHP ist eine kostenlose PHP Academy-Lektion auf CoddyKit. Dies ist Lektion 4 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des PHP Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der PHP Academy-Kurs umfasst insgesamt 4 Lektionen.

Warum Zeitzonen wichtig sind

Wenn Ihre Anwendung Nutzer weltweit bedient, ist der Umgang mit Zeitzonen entscheidend. PHP verwendet zeitzonenbewusste Funktionen und Klassen, um Konvertierungen korrekt durchzuführen.

  • Speichern Sie Zeitangaben in der Datenbank immer in UTC
  • Konvertieren Sie sie erst für die Anzeige in die lokale Zeitzone des Nutzers

date_default_timezone_set()

Legen Sie die Standardzeitzone für alle Datumsfunktionen fest:

<?php
// Set at the top of your script or in php.ini
date_default_timezone_set('Europe/Istanbul');

echo date('Y-m-d H:i:s');  // local Istanbul time
echo PHP_EOL;

date_default_timezone_set('UTC');
echo date('Y-m-d H:i:s');  // UTC time

// Or set in php.ini:
// date.timezone = "Europe/London"

DateTimeZone-Klasse

Erstellen Sie Zeitzonenobjekte zur Verwendung mit DateTime:

<?php
$utc      = new DateTimeZone('UTC');
$istanbul = new DateTimeZone('Europe/Istanbul');
$ny       = new DateTimeZone('America/New_York');

$dt = new DateTime('now', $utc);
echo $dt->format('Y-m-d H:i:s T');  // UTC time

Zwischen Zeitzonen konvertieren

Konvertieren Sie ein DateTime mit setTimezone() in eine andere Zeitzone:

<?php
$utcTime = new DateTime('2024-05-27 12:00:00', new DateTimeZone('UTC'));

$istanbul = clone $utcTime;
$istanbul->setTimezone(new DateTimeZone('Europe/Istanbul'));

$newYork = clone $utcTime;
$newYork->setTimezone(new DateTimeZone('America/New_York'));

echo 'UTC:      ' . $utcTime->format('H:i T')  . PHP_EOL;
echo 'Istanbul: ' . $istanbul->format('H:i T') . PHP_EOL;
echo 'New York: ' . $newYork->format('H:i T')  . PHP_EOL;

getOffset() und Sommerzeit

Ermitteln Sie den UTC-Versatz in Sekunden und prüfen Sie, ob Sommerzeit gilt:

<?php
$tz = new DateTimeZone('America/New_York');
$dt = new DateTime('now', $tz);

$offset = $tz->getOffset($dt);        // offset in seconds
$offsetHours = $offset / 3600;
echo 'Offset: ' . $offsetHours . 'h'; // e.g. -5 or -4 in DST

$transitions = $tz->getTransitions(
    strtotime('2024-01-01'),
    strtotime('2024-12-31')
);
echo 'DST changes in 2024: ' . count($transitions);

In UTC speichern, lokal anzeigen

Bewährte Vorgehensweise: Speichern Sie Zeitangaben in der Datenbank in UTC und zeigen Sie dem Nutzer die lokale Zeit an:

<?php
// Store: always save as UTC
$createdAt = (new DateTimeImmutable('now', new DateTimeZone('UTC')))
    ->format('Y-m-d H:i:s');

// Display: convert to user's timezone
$userTz  = new DateTimeZone($user['timezone'] ?? 'UTC');
$display = (new DateTime($createdAt, new DateTimeZone('UTC')))
    ->setTimezone($userTz)
    ->format('d M Y, H:i T');

Zeitzone des Nutzers erkennen

Erkennen und speichern Sie die Zeitzone des Nutzers für die Anzeige:

// JavaScript: detect and send to PHP:
// const tz = Intl.DateTimeFormat().resolvedOptions().timeZone;
// fetch('/api/set-timezone', { method:'POST', body: tz });

<?php
// PHP: validate and store
$tz = $_POST['timezone'] ?? 'UTC';
$valid = in_array($tz, DateTimeZone::listIdentifiers());

if ($valid) {
    $_SESSION['timezone'] = $tz;
    setcookie('user_tz', $tz, time() + 365 * 86400);
}

DateTimeZone::listIdentifiers()

Rufen Sie alle gültigen Zeitzonenbezeichner ab:

<?php
// All identifiers
$all = DateTimeZone::listIdentifiers();
echo count($all) . ' timezones available';

// Filter by region
$europe = DateTimeZone::listIdentifiers(DateTimeZone::EUROPE);
echo count($europe) . ' European timezones';

// Check if a timezone string is valid
function isValidTimezone(string $tz): bool {
    return in_array($tz, DateTimeZone::listIdentifiers());
}
var_dump(isValidTimezone('Europe/Istanbul')); // true

Zeitzonenversatz formatieren

Formatieren Sie den Zeitzonenversatz für die Anzeige und APIs:

<?php
$dt = new DateTime('now', new DateTimeZone('America/Los_Angeles'));

echo $dt->format('P');     // +05:30 or -07:00
echo $dt->format('O');     // +0530 (no colon)
echo $dt->format('T');     // PST or PDT
echo $dt->format('e');     // America/Los_Angeles
echo $dt->format('Z');     // offset in seconds

Unix-Zeitstempel sind zeitzonenneutral

Unix-Zeitstempel stellen unabhängig von der Zeitzone einen bestimmten Zeitpunkt dar – verwenden Sie sie für Vergleiche und Berechnungen:

<?php
// These represent the same moment:
$utc   = new DateTime('2024-05-27 12:00:00', new DateTimeZone('UTC'));
$ist   = new DateTime('2024-05-27 15:00:00', new DateTimeZone('Asia/Kolkata'));

echo $utc->getTimestamp();   // same timestamp
echo $ist->getTimestamp();   // same timestamp

var_dump($utc->getTimestamp() === $ist->getTimestamp()); // true

date_create mit Zeitzone

Prozedurale Zeitzonenverarbeitung mit date_create und date_timezone_set:

<?php
$dt = date_create('now', timezone_open('UTC'));
$tz = timezone_open('Europe/Istanbul');

date_timezone_set($dt, $tz);
echo date_format($dt, 'Y-m-d H:i:s T');

// Check transition info
$info = timezone_transitions_get($tz);
echo 'Current offset: ' . ($info[0]['offset'] / 3600) . 'h';

Schnelltest

Wo sollten Datums- und Zeitangaben für eine weltweit verteilte Anwendung in der Datenbank gespeichert werden?

Zusammenfassung: PHP-Zeitzonen

Grundlagen zu Zeitzonen:

  • Legen Sie die Standardzeitzone mit date_default_timezone_set() fest
  • Verwenden Sie DateTimeZone-Objekte mit DateTime
  • Verwenden Sie setTimezone(), um zwischen Zeitzonen zu konvertieren
  • Speichern Sie Zeitangaben in der Datenbank immer in UTC
  • Validieren Sie Zeitzonen der Nutzer mit DateTimeZone::listIdentifiers()
  • Unix-Zeitstempel sind zeitzonenneutrale Zeitpunkte

Häufig gestellte Fragen

Ist die Lektion „Zeitzonen in PHP“ kostenlos?

Ja — der vollständige Text von „Zeitzonen in PHP“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des PHP Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der PHP Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Zeitzonen in PHP“?

Arbeiten Sie mit mehreren Zeitzonen mithilfe von DateTimeZone und date_default_timezone_set. Du übst PHP Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um PHP Academy zu starten?

Keine Vorkenntnisse erforderlich. PHP Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 4 von 4.

Wie lange dauert die Lektion „Zeitzonen in PHP“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser PHP Academy-Lektion Code schreiben und ausführen?

Ja. Jede PHP Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Unix-Zeitstempel und date()
  2. Die DateTime-Klasse
  3. Datumsberechnungen mit DateInterval
  4. Zeitzonen in PHP
← Zurück zu PHP Academy