Signatur
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
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;
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;
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;
// 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.