mktime în PHP

Construiește timestamp-ul Unix pentru o dată și o oră anume, din ore, minute, secunde, lună, zi și an.

Sintaxă
mktime(int $hour, ?int $minute = null, ?int $second = null, ?int $month = null, ?int $day = null, ?int $year = null): int|false

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ști ArgumentCountError. Folosește time().
  • 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.