Start · Sprachen · PHP · Referenz · idate

idate

Funktion

Formatiert einen Teil der lokalen Zeit/des lokalen Datums als <code>int</code>-Wert anhand eines einstelligen Format-Zeichens.

seit PHP 5.0.0 Kategorie: date

Signatur

idate(string $format, int $timestamp = time()): int|false

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.timezone in der php.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

Typ
int|false
Beschreibung
Gibt die angeforderte Datums-/Zeit-Komponente als 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;
Heute ist der 15.3.2024 Der aktuelle Monat hat 31 Tage.

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;
01.01.2024 liegt in KW 1 des ISO-Jahres 2024. 2024 ist ein Schaltjahr.

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;
Guten Tag!

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