PHP jdtounix() — Convertir un Jour Julien en timestamp Unix
Apprenez comment jdtounix() en PHP convertit un Jour Julien en timestamp Unix, avec syntaxe, exemples, plage valide et usage avec gregoriantojd() et date().
La fonction jdtounix() convertit un Jour Julien (Julian Day Count) en timestamp Unix. Elle fait partie de l'extension calendrier de PHP et constitue le pont entre le calcul de dates en style calendrier (qui travaille en jours entiers) et le temps en secondes utilisé par le reste des fonctions de date de PHP.
Cette page explique ce que représentent ces deux systèmes de numérotation, montre jdtounix() en action, couvre sa plage valide et ses pièges, puis présente les conversions de timestamp Unix plus courantes que vous utiliserez bien plus souvent (date() et strtotime()).
Deux façons de compter le temps
Avant d'utiliser jdtounix(), il est utile de bien comprendre ce qu'elle convertit.
Un timestamp Unix est le nombre de secondes écoulées depuis 1970-01-01 00:00:00 UTC (l'« époque Unix »). C'est le standard utilisé partout en PHP — time(), date(), strtotime() et DateTime fonctionnent tous avec des timestamps Unix.
Un Jour Julien (JDC) est le nombre de jours entiers écoulés depuis midi le 1er janvier 4713 av. J.-C. (dans le calendrier julien proleptique). Les astronomes et les bibliothèques de calendriers l'utilisent car il attribue un entier unique à chaque jour, ce qui rend trivial le comptage de jours entre des dates de différents systèmes calendaires. Les fonctions PHP gregoriantojd(), jdtogregorian() et leurs semblables produisent et consomment ces comptes.
jdtounix() traduit un JDC en timestamp Unix équivalent à minuit UTC de ce jour.
Syntaxe
jdtounix(int $julian_day): int$julian_day— le Jour Julien à convertir.- Retourne le timestamp Unix correspondant. Le jour doit se situer dans la plage supportée ; une valeur hors plage lève une
ValueErroren PHP 8.0+ (les versions plus anciennes retournaientfalse).
Exemple de base
On dispose rarement d'un numéro de Jour Julien directement, donc le flux habituel est : convertir une date grégorienne en JDC avec gregoriantojd(), puis passer ce résultat à jdtounix().
<?php
// Build the Julian Day Count for 15 February 2022 (month, day, year).
$jd = gregoriantojd(2, 15, 2022);
echo $jd, "\n"; // 2459626
// Convert that day to a Unix timestamp (midnight UTC).
$timestamp = jdtounix($jd);
echo $timestamp, "\n"; // 1644883200
// Confirm by formatting it back to a readable date.
echo gmdate('Y-m-d H:i:s', $timestamp); // 2022-02-15 00:00:00Comme un Jour Julien représente une journée entière plutôt qu'un instant précis, jdtounix() retourne toujours le timestamp pour 00:00:00 UTC de ce jour. L'information sur l'heure ne fait tout simplement pas partie de l'entrée.
Plage valide
jdtounix() ne fonctionne qu'à l'intérieur de la fenêtre de l'époque Unix. Le jour le plus bas accepté est 1970-01-01, qui correspond au timestamp 0 :
<?php
// 1 January 1970 is the lowest day jdtounix() can represent.
var_dump(jdtounix(gregoriantojd(1, 1, 1970))); // int(0)Passer un jour antérieur à l'époque est une erreur : en PHP 8.0 et supérieur, cela lève une ValueError, tandis que PHP 7 retournait false. Si le jour en entrée est fourni par l'utilisateur, validez la plage (ou enveloppez l'appel dans un bloc try/catch) avant de vous fier au résultat. Sur les systèmes où les timestamps sont stockés en entiers signés 32 bits, la limite supérieure pratique se situe en 2038.
La fonction inverse est unixtojd(), qui reconvertit un timestamp Unix en Jour Julien.
Convertir un timestamp Unix en date lisible
Une fois que vous disposez d'un timestamp — provenant de jdtounix(), time() ou d'une base de données — vous le formatez pour les humains avec la fonction date(). Elle prend une chaîne de format et un timestamp :
Les barres obliques inversées dans \a\t échappent les lettres a et t pour qu'elles s'impriment littéralement au lieu d'être interprétées comme des caractères de format. Voici quelques-uns des caractères de format les plus courants :
Y— année sur quatre chiffresm— mois avec zéros de remplissage (01–12)M— abréviation du mois (Jan–Dec)d— jour du mois avec zéros de remplissage (01–31)D— abréviation du jour de la semaine (Sun–Sat)g— heure au format 12 heures, sans zéro de remplissage (1–12)H— heure au format 24 heures avec zéros de remplissage (00–23)i— minutes avec zéros de remplissage (00–59)s— secondes avec zéros de remplissage (00–59)a—am/pmen minuscules
Une note sur les fuseaux horaires
PHP formate chaque timestamp par rapport au fuseau horaire par défaut du script, donc le même timestamp peut s'afficher comme des heures différentes sur des serveurs différents. Définissez le fuseau horaire explicitement en haut de votre script — avec date_default_timezone_set() comme ci-dessus — afin que les résultats soient reproductibles partout. Les exemples de cette page utilisent UTC.
Convertir une date lisible en timestamp Unix
Dans l'autre sens, strtotime() analyse une description de date en anglais et la convertit en timestamp Unix :
<?php
date_default_timezone_set('UTC');
$timestamp = strtotime('February 15, 2022 6:17 pm');
echo $timestamp; // 1644949020strtotime() comprend de nombreux formats — 2022-02-15, next Friday, +1 week — mais il est strict sur la formulation. Les mots de remplissage tels que at ne sont pas autorisés : strtotime('February 15, 2022 at 6:17 pm') retourne false. Quand l'analyse échoue, strtotime() retourne false, donc validez son résultat avant de l'utiliser.
Quand utiliser jdtounix() ?
Pour le travail quotidien de « stocker et afficher une date », utilisez date(), strtotime() et DateTime — ils gèrent directement les dates et heures calendaires réelles. Utilisez jdtounix() (avec gregoriantojd()) lorsque vous travaillez déjà avec des numéros de Jours Juliens, par exemple lors de l'intégration de données astronomiques, de l'interopérabilité avec un autre système calendaire, ou du comptage de jours entiers entre des dates puis de la nécessité d'obtenir un timestamp standard en retour.
Conversion en un coup d'œil
graph LR;
A[Gregorian date] -->|gregoriantojd| B[Julian Day Count];
B -->|jdtounix| C[Unix timestamp];
C -->|unixtojd| B;
C -->|date| D[Readable string];Conclusion
jdtounix() convertit un Jour Julien en timestamp Unix correspondant à minuit UTC de ce jour, retournant false pour les jours hors de la plage de l'époque. Elle s'associe naturellement à gregoriantojd() en entrée et à unixtojd() pour le chemin inverse. Pour la gestion ordinaire des dates, la boîte à outils plus large dans PHP Date et Heure — notamment date() et strtotime() — est ce que vous utiliserez le plus souvent.