gmmktime()
Was ist die PHP-Funktion gmmktime()? Sie erzeugt einen Unix-Zeitstempel für ein bestimmtes Datum und eine Uhrzeit basierend auf GMT/UTC.
Was ist die PHP-Funktion gmmktime()?
Die PHP-Funktion gmmktime() erstellt einen Unix-Zeitstempel aus den einzelnen Bestandteilen eines Datums und einer Uhrzeit (Stunde, Minute, Sekunde, Monat, Tag, Jahr) und interpretiert diese als GMT/UTC statt als lokale Zeitzone des Servers. Ein Unix-Zeitstempel ist schlicht die Anzahl der Sekunden, die seit dem 1. Januar 1970, 00:00:00 UTC vergangen sind — der Wert, den die meisten PHP-Datumsfunktionen intern verwenden.
Diese Seite behandelt die Syntax und Parameter der Funktion, den Unterschied zu mktime(), das Überlaufen von Werten außerhalb des gültigen Bereichs und den Fallstrick, der die meisten Entwickler überrascht: In modernem PHP sind die Parameter nicht alle optional.
Der Name setzt sich zusammen aus Greenwich Mean Time + make time.
Syntax
gmmktime(
int $hour = current,
?int $minute = current,
?int $second = current,
?int $month = current,
?int $day = current,
?int $year = current
): int|falseDie Funktion gibt den Zeitstempel als Integer zurück oder false, wenn die Argumente eine ungültige Zeit beschreiben.
Parameter
| Parameter | Bedeutung |
|---|---|
hour | Stunden, 0–23 (ab PHP 8.0 erforderlich). |
minute | Minuten, 0–59. |
second | Sekunden, 0–59. |
month | Monatsnummer, 1–12. |
day | Tag des Monats, 1–31. |
year | 4-stelliges Jahr. |
Achtung: In PHP 8.0 und höher wirft der Aufruf von
gmmktime()ohne Argumente einenArgumentCountError—hourist Pflichtparameter. Jedes ausgelassene Argument wird standardmäßig auf den entsprechenden Wert der aktuellen GMT-Zeit gesetzt. Um den Zeitstempel für „jetzt" zu erhalten, sollte stattdessentime()verwendet werden.
Einfaches Beispiel
Dies erzeugt den Unix-Zeitstempel für den 3. März 2023 um 12:30:00 Uhr GMT. Um ihn in lesbarer Form ausgeben, kann er mit gmdate() kombiniert werden:
<?php
$timestamp = gmmktime(12, 30, 0, 3, 3, 2023);
echo gmdate('Y-m-d H:i:s', $timestamp);
// 2023-03-03 12:30:00gmmktime() vs. mktime()
gmmktime() und mktime() nehmen exakt dieselben Argumente entgegen und geben einen Unix-Zeitstempel zurück — der einzige Unterschied liegt in der Zeitzone, in der die Teile interpretiert werden. gmmktime() behandelt sie als GMT/UTC; mktime() behandelt sie als lokale Zeitzone des Servers. Bei gleichen Eingaben erzeugen sie unterschiedliche Zeitstempel, wenn die lokale Zeit von UTC abweicht:
<?php
date_default_timezone_set('America/New_York'); // UTC-4 in June
echo gmmktime(12, 0, 0, 6, 15, 2023), "\n"; // 1686830400 (12:00 UTC)
echo mktime(12, 0, 0, 6, 15, 2023), "\n"; // 1686844800 (12:00 New York = 16:00 UTC)gmmktime() sollte verwendet werden, wenn die Eingaben bereits in UTC vorliegen (Zeitstempel aus einer API, einer in UTC gespeicherten Datenbank usw.), damit das Ergebnis nicht von der Zeitzonen-Einstellung des Servers abhängt.
Werte außerhalb des Bereichs werden normalisiert
Die Teile müssen nicht innerhalb ihrer normalen Bereiche liegen. gmmktime() normalisiert sie, was praktisch für Datumsberechnungen ohne manuelle Überträge ist:
<?php
// Month 13 rolls into the next year
echo gmdate('Y-m-d', gmmktime(0, 0, 0, 13, 1, 2023)), "\n"; // 2024-01-01
// Day 32 of January becomes February 1st
echo gmdate('Y-m-d', gmmktime(0, 0, 0, 1, 32, 2023)), "\n"; // 2023-02-01
// Hour 25 rolls into the next day at 01:00
echo gmdate('Y-m-d H:i', gmmktime(25, 0, 0, 1, 1, 2023)), "\n"; // 2023-01-02 01:00Dadurch funktionieren Ausdrücke wie gmmktime(0, 0, 0, $month, $day + 7, $year) („sieben Tage später") korrekt über Monats- und Jahresgrenzen hinweg.
Wann sollte gmmktime() verwendet werden?
- Zeitzonen-Konsistenz. Da immer UTC verwendet wird, erzeugen dieselben Argumente auf jedem Server denselben Zeitstempel, unabhängig von
date.timezone. - Zeitstempel aus Einzelteilen erstellen. Wenn separate Stunden-/Tag-/Monatswerte vorliegen (z. B. aus einem Formular oder einer geparsten Zeichenkette) statt einer einzelnen Datumszeichenkette. Für einen vollständigen Datums-string wie
"2023-03-03 12:30"bietet sich stattdessenstrtotime()an. - Datumsberechnung über Überlauf. Einen Bestandteil addieren oder subtrahieren und die Funktion das Ergebnis normalisieren lassen.
Wenn nur überprüft werden soll, ob eine Kombination aus Monat/Tag/Jahr ein gültiges Kalenderdatum ergibt, ist checkdate() die richtige Wahl.
Fazit
gmmktime() wandelt einzelne Datums- und Zeitkomponenten in einen UTC-basierten Unix-Zeitstempel um. Die wichtigsten Stärken sind Zeitzonenunabhängigkeit und die automatische Normalisierung von Werten außerhalb des Gültigkeitsbereichs. Zu beachten ist, dass PHP 8+ im Gegensatz zu älteren PHP-Versionen mindestens das Argument hour erfordert. mktime() sollte verwendet werden, wenn die Eingaben in lokaler Zeit vorliegen, und gmdate() zur Formatierung des Ergebnisses.