Start · Sprachen · PHP · Referenz · gmmktime

gmmktime

Funktion

Berechnet einen Unix-Zeitstempel für ein angegebenes Datum und eine Uhrzeit in der Zeitzone GMT/UTC.

seit PHP 4.0.0 Kategorie: date

Signatur

gmmktime(int $hour, int $minute, int $second, int $month, int $day, int $year): int|false

Beschreibung

gmmktime() funktioniert identisch zu mktime(), interpretiert die übergebenen Parameter jedoch immer als GMT/UTC-Zeit, unabhängig von der serverseitigen Zeitzoneneinstellung. Das Ergebnis ist ein Unix-Zeitstempel (Anzahl der Sekunden seit dem 1. Januar 1970 00:00:00 UTC).

Die Funktion ist besonders nützlich, wenn Zeitstempel für einen bestimmten UTC-Zeitpunkt erzeugt werden sollen – beispielsweise bei der Verarbeitung von API-Daten, Protokolleinträgen oder internationalen Anwendungen, bei denen eine einheitliche Zeitzone erforderlich ist.

Die Parameter für Stunde, Minute, Sekunde, Monat, Tag und Jahr müssen explizit übergeben werden. Außerhalb der Grenzen liegende Werte (z. B. Monat 13 oder Tag 0) werden automatisch in den entsprechenden gültigen Zeitstempel umgerechnet, was die Berechnung relativer Datumswerte vereinfacht.

Ab PHP 8.0 wurden die bisher optionalen Parameter, die bei Weglassen die aktuelle Systemzeit verwendeten, als verpflichtend erklärt und das Weglassen erzeugt eine Deprecation-Meldung. Seit PHP 8.0 gibt die Funktion bei ungültigen Argumenten false zurück.

Parameter

Name Typ Default Beschreibung
$hour Pflicht int Die Stunde des gewünschten Zeitpunkts (0–23). Werte außerhalb dieses Bereichs werden entsprechend normalisiert.
$minute Pflicht int Die Minute des gewünschten Zeitpunkts (0–59). Werte außerhalb dieses Bereichs werden entsprechend normalisiert.
$second Pflicht int Die Sekunde des gewünschten Zeitpunkts (0–59). Werte außerhalb dieses Bereichs werden entsprechend normalisiert.
$month Pflicht int Der Monat des gewünschten Datums (1–12). Werte außerhalb dieses Bereichs werden entsprechend normalisiert.
$day Pflicht int Der Tag des gewünschten Datums (1–31). Werte außerhalb dieses Bereichs werden entsprechend normalisiert.
$year Pflicht int Das Jahr des gewünschten Datums (vierstellig empfohlen, z. B. 2024). Zweistellige Jahresangaben werden als 1970–2069 interpretiert.

Rückgabewert

Typ
int|false
Beschreibung
Gibt den Unix-Zeitstempel als int zurück, der dem angegebenen GMT/UTC-Datum entspricht. Bei einem Fehler oder ungültigen Argumenten wird false zurückgegeben.

Beispiele

Zeitstempel für ein bestimmtes UTC-Datum erzeugen

<?php
// Zeitstempel für den 1. Januar 2024, 12:00:00 UTC
$timestamp = gmmktime(12, 0, 0, 1, 1, 2024);
echo $timestamp . PHP_EOL;

// Ausgabe als formatiertes UTC-Datum zur Kontrolle
echo gmdate('Y-m-d H:i:s', $timestamp) . PHP_EOL;
1704110400 2024-01-01 12:00:00

Differenz zwischen lokalem mktime() und gmmktime() verdeutlichen

<?php
// Angenommene Server-Zeitzone: Europe/Berlin (UTC+1 im Winter)
date_default_timezone_set('Europe/Berlin');

$lokal = mktime(12, 0, 0, 6, 15, 2024);
$utc   = gmmktime(12, 0, 0, 6, 15, 2024);

echo 'Lokal (Berlin): ' . date('Y-m-d H:i:s T', $lokal) . PHP_EOL;
echo 'GMT-Stempel:    ' . gmdate('Y-m-d H:i:s T', $utc) . PHP_EOL;
echo 'Differenz (Sek.): ' . ($lokal - $utc) . PHP_EOL;
Lokal (Berlin): 2024-06-15 12:00:00 CEST GMT-Stempel: 2024-06-15 12:00:00 UTC Differenz (Sek.): -7200

Normalisierung von Randwerten (letzter Tag eines Monats)

<?php
// Tag 0 im März ergibt den letzten Tag des Februar
$timestamp = gmmktime(0, 0, 0, 3, 0, 2024);
echo gmdate('Y-m-d', $timestamp) . PHP_EOL;

// Tag 32 im Januar ergibt den 1. Februar
$timestamp2 = gmmktime(0, 0, 0, 1, 32, 2024);
echo gmdate('Y-m-d', $timestamp2) . PHP_EOL;
2024-02-29 2024-02-01

// Wichtig · Fallstricke

Deprecation in PHP 8.0: Das Weglassen einzelner Parameter war früher erlaubt, wobei fehlende Werte aus der aktuellen GMT-Zeit übernommen wurden. Seit PHP 8.0 müssen alle Parameter explizit übergeben werden; das Weglassen löst eine E_DEPRECATED-Warnung aus.

Zeitzonenfallen: Im Gegensatz zu mktime() ignoriert gmmktime() die mit date_default_timezone_set() oder der php.ini-Einstellung date.timezone gesetzten Zeitzonen vollständig. Wer serverseitige Zeitzonenunabhängigkeit benötigt, sollte konsequent gmmktime() zusammen mit gmdate() verwenden.

Für komplexere Datumsoperationen mit Zeitzonenverwaltung empfiehlt sich die Verwendung der DateTimeImmutable-Klasse mit explizitem DateTimeZone('UTC')-Objekt, da diese einen moderneren und fehlersichereren Ansatz bietet.