Ce face mktime
mktime face operația inversă lui date: primește bucățile unei date și returnează timestamp-ul (numărul de secunde de la 1 ianuarie 1970). Parametrii lipsă iau valoarea momentului curent.
Atenție la ordinea parametrilor: ora, minutul, secunda, apoi luna, ziua și anul. Valorile prea mari sau prea mici sunt corectate automat: luna 13 devine ianuarie din anul următor, iar ziua 0 este ultima zi a lunii precedente. Asta face din mktime un instrument comod pentru calcule cu date.
Rezultatul depinde de fusul orar setat. Pentru ora României, apelează întâi date_default_timezone_set("Europe/Bucharest").
Parametri
| Parametru | Descriere |
|---|---|
$hour |
Ora (0-23). Obligatoriu din PHP 8. |
$minute |
Opțional. Minutul. |
$second |
Opțional. Secunda. |
$month |
Opțional. Luna (1-12). Valorile din afara intervalului se transformă în lunile anilor vecini. |
$day |
Opțional. Ziua lunii. 0 înseamnă ultima zi a lunii anterioare. |
$year |
Opțional. Anul, cu 4 cifre. |
Ce returnează
Timestamp-ul Unix, ca număr întreg, sau false dacă data nu poate fi reprezentată.
Exemple
Exemplul 1: Timestamp-ul unei date anume
<?php
date_default_timezone_set("Europe/Bucharest");
$t = mktime(9, 30, 0, 12, 1, 2026);
echo $t . "\n";
echo date("d.m.Y H:i", $t);
Rezultat
1796110200
01.12.2026 09:30
Exemplul 2: Ultima zi a lunii, cu ziua 0
Ziua 0 din martie este ultima zi din februarie. Așa afli ușor dacă februarie are 28 sau 29 de zile.
<?php
date_default_timezone_set("Europe/Bucharest");
echo date("d.m.Y", mktime(0, 0, 0, 3, 0, 2026)) . "\n";
echo date("d.m.Y", mktime(0, 0, 0, 3, 0, 2024));
Rezultat
28.02.2026
29.02.2024
Exemplul 3: Adunarea zilelor și a lunilor
PHP corectează singur ziua 64 din octombrie și luna 13.
<?php
date_default_timezone_set("Europe/Bucharest");
// 45 de zile după 19 octombrie 2026
echo date("d.m.Y", mktime(0, 0, 0, 10, 19 + 45, 2026)) . "\n";
// luna 13 din 2026 este ianuarie 2027
echo date("d.m.Y", mktime(0, 0, 0, 13, 1, 2026));
Rezultat
03.12.2026
01.01.2027
Greșeli frecvente
- Inversezi luna și ziua, ca în formatul românesc.
mktime(0, 0, 0, 1, 12, 2026)înseamnă 12 ianuarie, nu 1 decembrie. - Apelezi
mktime()fără parametri ca să obții momentul curent. Din PHP 8 primeștiArgumentCountError. Foloseștetime(). - Nu setezi fusul orar și timestamp-ul iese decalat cu 2-3 ore față de ora României.
Comenzi înrudite
date: Afișează data și ora într-un anumit format.time: Returnează momentul curent ca număr de secunde de la 1 ianuarie 1970 (timestamp Unix).checkdate: Verifică dacă o dată există în calendar, de exemplu că 29 februarie apare doar în anii bisecți.strtotime: Transformă o dată scrisă ca text (inclusiv expresii ca „+1 week”) în timestamp.gmdate: Formatează o dată la fel ca date(), dar mereu în ora UTC (GMT), indiferent de fusul orar setat.