gmmktime()
Qu'est-ce que la fonction gmmktime() en PHP ? Elle génère un horodatage Unix pour une date et une heure spécifiques interprétées en GMT/UTC.
Qu'est-ce que la fonction gmmktime() en PHP ?
La fonction gmmktime() de PHP construit un horodatage Unix à partir des parties individuelles d'une date et d'une heure (heure, minute, seconde, mois, jour, année), en interprétant ces parties en GMT/UTC plutôt que dans le fuseau horaire local du serveur. Un horodatage Unix est simplement le nombre de secondes écoulées depuis le 1er janvier 1970, 00:00:00 UTC — la valeur utilisée en interne par la plupart des fonctions de date PHP.
Cette page couvre la syntaxe et les paramètres de la fonction, comment elle diffère de mktime(), comment les valeurs hors limites se reportent, et le piège qui surprend la plupart des gens : dans PHP moderne, les paramètres ne sont pas tous optionnels.
Le nom se lit comme greenwich mean time + make time.
Syntaxe
gmmktime(
int $hour = current,
?int $minute = current,
?int $second = current,
?int $month = current,
?int $day = current,
?int $year = current
): int|falseElle retourne l'horodatage sous forme d'entier, ou false si les arguments décrivent une heure invalide.
Paramètres
| Paramètre | Signification |
|---|---|
hour | Heures, 0–23 (obligatoire depuis PHP 8.0). |
minute | Minutes, 0–59. |
second | Secondes, 0–59. |
month | Numéro du mois, 1–12. |
day | Jour du mois, 1–31. |
year | Année à 4 chiffres. |
Attention : Dans PHP 8.0 et versions ultérieures, appeler
gmmktime()sans arguments lève uneArgumentCountError—hourest obligatoire. Tout argument omis prend par défaut la valeur correspondante de l'heure GMT actuelle. Pour obtenir « maintenant » sous forme d'horodatage, utilisez plutôttime().
Exemple de base
Ceci génère l'horodatage Unix pour le 3 mars 2023 à 12h30:00 GMT. Pour le relire sous une forme lisible par l'humain, associez-le avec gmdate() :
<?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() et mktime() prennent exactement les mêmes arguments et retournent un horodatage Unix — la seule différence est le fuseau horaire dans lequel les parties sont interprétées. gmmktime() les traite en GMT/UTC ; mktime() les traite dans le fuseau horaire local du serveur. Avec les mêmes entrées, ils produisent des horodatages différents lorsque l'heure locale est décalée par rapport à UTC :
<?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)Utilisez gmmktime() lorsque vos entrées sont déjà en UTC (horodatages provenant d'une API, d'une base de données stockée en UTC, etc.) afin que le résultat ne soit pas affecté par le paramètre de fuseau horaire du serveur.
Les valeurs hors limites se reportent
Il n'est pas nécessaire de garder les parties dans leurs plages normales. gmmktime() les normalise, ce qui est pratique pour l'arithmétique de date sans report manuel :
<?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:00Cela permet aux expressions comme gmmktime(0, 0, 0, $month, $day + 7, $year) (« sept jours plus tard ») de fonctionner correctement au-delà des frontières de mois et d'années.
Quand utiliser gmmktime()
- Cohérence des fuseaux horaires. Parce qu'elle utilise toujours UTC, les mêmes arguments produisent le même horodatage sur chaque serveur, indépendamment de
date.timezone. - Construire des horodatages à partir de parties. Lorsque vous disposez de valeurs d'heure/jour/mois séparées (par exemple depuis un formulaire ou une chaîne analysée) plutôt qu'une chaîne de date unique. Pour une chaîne de date complète comme
"2023-03-03 12:30", utilisez plutôtstrtotime(). - Arithmétique de date via report. Ajoutez ou soustrayez d'un composant et laissez la fonction normaliser le résultat.
Si vous avez seulement besoin de valider qu'une combinaison mois/jour/année est une date calendaire réelle, consultez checkdate().
Conclusion
gmmktime() transforme des composants de date et d'heure séparés en un horodatage Unix basé sur UTC. Ses principaux atouts sont l'indépendance du fuseau horaire et la normalisation automatique des valeurs hors limites. Rappelez-vous que, contrairement aux anciennes versions de PHP, PHP 8+ requiert au moins l'argument hour, et utilisez mktime() lorsque vos entrées sont en heure locale et gmdate() pour formater le résultat.