Fuseaux horaires en PHP
Gérer plusieurs fuseaux horaires avec DateTimeZone et date_default_timezone_set.
Fuseaux horaires en PHP est une leçon PHP Academy gratuite sur CoddyKit. Ceci est la leçon 4 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage PHP Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours PHP Academy comprend 4 leçons au total.
Pourquoi les fuseaux horaires sont importants
Si votre application est utilisée dans le monde entier, la gestion des fuseaux horaires est cruciale. PHP utilise des fonctions et des classes tenant compte du fuseau horaire pour gérer correctement les conversions.
- Stockez toujours les heures en UTC dans la base de données
- Convertissez-les dans le fuseau horaire local de l’utilisateur uniquement pour l’affichage
date_default_timezone_set()
Définissez le fuseau horaire par défaut pour toutes les fonctions de date :
<?php
// Set at the top of your script or in php.ini
date_default_timezone_set('Europe/Istanbul');
echo date('Y-m-d H:i:s'); // local Istanbul time
echo PHP_EOL;
date_default_timezone_set('UTC');
echo date('Y-m-d H:i:s'); // UTC time
// Or set in php.ini:
// date.timezone = "Europe/London"Classe DateTimeZone
Créez des objets de fuseau horaire à utiliser avec DateTime :
<?php
$utc = new DateTimeZone('UTC');
$istanbul = new DateTimeZone('Europe/Istanbul');
$ny = new DateTimeZone('America/New_York');
$dt = new DateTime('now', $utc);
echo $dt->format('Y-m-d H:i:s T'); // UTC timeConvertir entre les fuseaux horaires
Convertissez un DateTime vers un autre fuseau horaire avec setTimezone() :
<?php
$utcTime = new DateTime('2024-05-27 12:00:00', new DateTimeZone('UTC'));
$istanbul = clone $utcTime;
$istanbul->setTimezone(new DateTimeZone('Europe/Istanbul'));
$newYork = clone $utcTime;
$newYork->setTimezone(new DateTimeZone('America/New_York'));
echo 'UTC: ' . $utcTime->format('H:i T') . PHP_EOL;
echo 'Istanbul: ' . $istanbul->format('H:i T') . PHP_EOL;
echo 'New York: ' . $newYork->format('H:i T') . PHP_EOL;getOffset() et DST
Obtenez le décalage par rapport à UTC en secondes et vérifiez s’il s’agit de DST :
<?php
$tz = new DateTimeZone('America/New_York');
$dt = new DateTime('now', $tz);
$offset = $tz->getOffset($dt); // offset in seconds
$offsetHours = $offset / 3600;
echo 'Offset: ' . $offsetHours . 'h'; // e.g. -5 or -4 in DST
$transitions = $tz->getTransitions(
strtotime('2024-01-01'),
strtotime('2024-12-31')
);
echo 'DST changes in 2024: ' . count($transitions);Stocker en UTC, afficher en heure locale
Bonne pratique : stockez les heures en UTC dans la base de données et affichez l’heure locale à l’utilisateur :
<?php
// Store: always save as UTC
$createdAt = (new DateTimeImmutable('now', new DateTimeZone('UTC')))
->format('Y-m-d H:i:s');
// Display: convert to user's timezone
$userTz = new DateTimeZone($user['timezone'] ?? 'UTC');
$display = (new DateTime($createdAt, new DateTimeZone('UTC')))
->setTimezone($userTz)
->format('d M Y, H:i T');Détecter le fuseau horaire de l’utilisateur
Détectez et stockez le fuseau horaire de l’utilisateur à des fins d’affichage :
// JavaScript: detect and send to PHP:
// const tz = Intl.DateTimeFormat().resolvedOptions().timeZone;
// fetch('/api/set-timezone', { method:'POST', body: tz });
<?php
// PHP: validate and store
$tz = $_POST['timezone'] ?? 'UTC';
$valid = in_array($tz, DateTimeZone::listIdentifiers());
if ($valid) {
$_SESSION['timezone'] = $tz;
setcookie('user_tz', $tz, time() + 365 * 86400);
}DateTimeZone::listIdentifiers()
Obtenez tous les identifiants de fuseau horaire valides :
<?php
// All identifiers
$all = DateTimeZone::listIdentifiers();
echo count($all) . ' timezones available';
// Filter by region
$europe = DateTimeZone::listIdentifiers(DateTimeZone::EUROPE);
echo count($europe) . ' European timezones';
// Check if a timezone string is valid
function isValidTimezone(string $tz): bool {
return in_array($tz, DateTimeZone::listIdentifiers());
}
var_dump(isValidTimezone('Europe/Istanbul')); // trueFormater le décalage horaire
Formatez le décalage horaire pour l’affichage et les API :
<?php
$dt = new DateTime('now', new DateTimeZone('America/Los_Angeles'));
echo $dt->format('P'); // +05:30 or -07:00
echo $dt->format('O'); // +0530 (no colon)
echo $dt->format('T'); // PST or PDT
echo $dt->format('e'); // America/Los_Angeles
echo $dt->format('Z'); // offset in secondsLes horodatages Unix sont neutres vis-à-vis des fuseaux horaires
Les horodatages Unix représentent un instant précis, quel que soit le fuseau horaire — utilisez-les pour les comparaisons et les calculs :
<?php
// These represent the same moment:
$utc = new DateTime('2024-05-27 12:00:00', new DateTimeZone('UTC'));
$ist = new DateTime('2024-05-27 15:00:00', new DateTimeZone('Asia/Kolkata'));
echo $utc->getTimestamp(); // same timestamp
echo $ist->getTimestamp(); // same timestamp
var_dump($utc->getTimestamp() === $ist->getTimestamp()); // truedate_create avec un fuseau horaire
Gestion procédurale des fuseaux horaires avec date_create et date_timezone_set :
<?php
$dt = date_create('now', timezone_open('UTC'));
$tz = timezone_open('Europe/Istanbul');
date_timezone_set($dt, $tz);
echo date_format($dt, 'Y-m-d H:i:s T');
// Check transition info
$info = timezone_transitions_get($tz);
echo 'Current offset: ' . ($info[0]['offset'] / 3600) . 'h';Vérification rapide
Où les dates et heures doivent-elles être stockées dans la base de données pour une application distribuée dans le monde entier ?
Récapitulatif : fuseaux horaires PHP
Les notions essentielles sur les fuseaux horaires :
- Définissez le fuseau horaire par défaut avec
date_default_timezone_set() - Utilisez des objets
DateTimeZoneavec DateTime - Utilisez
setTimezone()pour convertir entre les fuseaux - Stockez toujours les heures en UTC dans la base de données
- Validez les fuseaux horaires des utilisateurs avec
DateTimeZone::listIdentifiers() - Les horodatages Unix représentent des instants neutres vis-à-vis des fuseaux horaires
Questions Fréquemment Posées
La leçon « Fuseaux horaires en PHP » est-elle gratuite ?
Oui — le texte complet de « Fuseaux horaires en PHP » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours PHP Academy, passe à CoddyKit PRO. Le cours PHP Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Fuseaux horaires en PHP » ?
Gérer plusieurs fuseaux horaires avec DateTimeZone et date_default_timezone_set. Tu pratiques PHP Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer PHP Academy ?
Aucune expérience préalable n'est requise. PHP Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 4 sur 4.
Combien de temps prend la leçon « Fuseaux horaires en PHP » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon PHP Academy ?
Oui. Chaque leçon PHP Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Horodatages Unix et date()
- La classe DateTime
- Calculs sur les dates avec DateInterval
- Fuseaux horaires en PHP