Signatur
Beschreibung
idate() ähnelt date(), gibt jedoch statt eines formatierten Strings einen ganzzahligen Wert (int) zurück. Als Formatparameter wird genau ein einzelnes Zeichen akzeptiert; alle anderen Zeichen oder Zeichenketten führen zu einem Fehler. Der optionale zweite Parameter $timestamp ermöglicht die Auswertung eines beliebigen Unix-Zeitstempels; fehlt er, wird die aktuelle Zeit verwendet.
Typische Einsatzgebiete sind arithmetische Berechnungen auf Basis einzelner Datums- oder Zeitkomponenten, etwa die Ermittlung des aktuellen Jahres, der aktuellen Woche oder Stunde, ohne dass eine anschließende Typkonvertierung aus einem String notwendig ist.
Da idate() nur ein einziges Format-Zeichen verarbeitet, ist die Funktion für komplexe Datums-Formatierungen nicht geeignet – dafür sollte date() oder das objektorientierte DateTime-Modell verwendet werden. Für die Rückgabe eines einzelnen numerischen Datumswerts ist idate() hingegen die direkteste und effizienteste Wahl.
- Die Ausgabe hängt von der gesetzten Standard-Zeitzone ab (
date_default_timezone_set()bzw.date.timezonein derphp.ini). - Führende Nullen werden nicht ausgegeben – der Rückgabewert ist stets ein echter
int.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $format Pflicht | string | Genau ein Zeichen, das die gewünschte Datums-/Zeit-Komponente angibt. Unterstützte Zeichen: B (Swatch-Beat), d (Tag), h (Stunde 12h), H (Stunde 24h), i (Minute), I (Sommerzeit, 1 oder 0), j (Tag ohne führende Null – identisch mit d bei idate), L (Schaltjahr, 1 oder 0), m (Monat), N (ISO-Wochentag 1=Mo–7=So), o (ISO-Jahr), s (Sekunde), t (Anzahl Tage im Monat), U (Unix-Timestamp), w (Wochentag 0=So–6=Sa), W (ISO-Kalenderwoche), y (zweistelliges Jahr), Y (vierstelliges Jahr), z (Jahrestag 0–365). |
|
| $timestamp | int | time() | Optionaler Unix-Zeitstempel. Fehlt dieser Parameter, wird der aktuelle Zeitpunkt (time()) verwendet. |
Rückgabewert
int zurück. Im Fehlerfall (ungültiges Format-Zeichen oder mehr als ein Zeichen) wird false zurückgegeben und ein E_WARNING ausgelöst.Beispiele
Aktuelles Jahr, Monat und Tag als Integer ermitteln
<?php
// Aktuelle Datumsteile als Integer
$jahr = idate('Y'); // z. B. 2024
$monat = idate('m'); // z. B. 3
$tag = idate('d'); // z. B. 15
echo "Heute ist der $tag.$monat.$jahr" . PHP_EOL;
// Berechnung: Wie viele Tage sind im aktuellen Monat?
$tageImMonat = idate('t');
echo "Der aktuelle Monat hat $tageImMonat Tage." . PHP_EOL;
ISO-Kalenderwoche eines bestimmten Datums berechnen
<?php
// Zeitstempel für den 1. Januar 2024 erzeugen
$ts = mktime(0, 0, 0, 1, 1, 2024);
$kw = idate('W', $ts); // ISO-Kalenderwoche
$jahr = idate('o', $ts); // ISO-Jahr (kann vom Kalenderjahr abweichen!)
echo "01.01.2024 liegt in KW $kw des ISO-Jahres $jahr." . PHP_EOL;
// Prüfen ob 2024 ein Schaltjahr ist
$schaltjahr = idate('L', $ts);
echo $schaltjahr ? '2024 ist ein Schaltjahr.' : '2024 ist kein Schaltjahr.';
echo PHP_EOL;
Dynamische Geschäftslogik basierend auf der aktuellen Stunde
<?php
// Begrüßung je nach Tageszeit
$stunde = idate('H'); // 0–23
if ($stunde >= 5 && $stunde < 12) {
echo 'Guten Morgen!';
} elseif ($stunde >= 12 && $stunde < 18) {
echo 'Guten Tag!';
} else {
echo 'Guten Abend!';
}
echo PHP_EOL;
// Wichtig · Fallstricke
Zeitzone beachten: idate() verwendet die lokale Zeitzone des Systems bzw. die per date_default_timezone_set() gesetzte Zone. Eine nicht gesetzte Zeitzone erzeugt eine E_NOTICE-Warnung. Immer explizit eine Zeitzone setzen oder in der php.ini (date.timezone) konfigurieren.
Genau ein Format-Zeichen: Im Gegensatz zu date() akzeptiert idate() ausschließlich einen einzelnen Buchstaben als $format. Werden mehrere Zeichen übergeben, gibt die Funktion false zurück und erzeugt eine Warnung. Für zusammengesetzte Datumsstrings muss date() oder DateTime::format() verwendet werden.
ISO-Jahr vs. Kalenderjahr: Das Format-Zeichen o gibt das ISO-8601-Jahr zurück, das für Tage am Jahresbeginn oder -ende vom tatsächlichen Kalenderjahr abweichen kann. In solchen Fällen sollte o stets zusammen mit W verwendet werden.