Travailler avec des fuseaux horaires peut être délicat en programmation.
Comme PHP est destiné au web, le langage le supporte. Voyons pourquoi vous devriez vous en soucier.
Si vous ne vous souciez pas des fuseaux horaires, vous obtenez des bugs tôt ou tard.
Les fonctionnalités liées au temps peuvent échouer (par exemple, les événements planifiés). La situation est pire si vous devez gérer des concepts délicats comme l'heure d'été.
Ces concepts sont essentiels pour le e-Commerce :
Tout bug finira par nuire à l'entreprise.
L'implémentation la plus basique mais toujours puissante serait similaire à celle-ci :
$timeZone = new DateTimeZone('Europe/Berlin'); $date = new DateTime('now', $timeZone); echo $date->format('Y-m-d H:i:s');
La classe DateTime intégrée prend un objet DateTimeZone comme deuxième argument, ce qui affectera d'autres opérations avec l'objet $date.
Pour trouver le bon fuseau horaire, vous pouvez utiliser DateTimeZone::listIdentifiers() ou ce lien.
DateTime fournit diverses aides pour exécuter des opérations courantes sur les dates. Le décalage horaire est très basique, mais que se passe-t-il avec les différents fuseaux horaires ?
$dateTimeNY = new DateTime('2024-08-02 01:01:01', new DateTimeZone('America/New_York')); $dateTimeBerlin = new DateTime('2024-08-02 07:01:01', new DateTimeZone('Europe/Berlin')); $interval = $dateTimeNY->diff($dateTimeBerlin); print_r($interval);// 0 everywhere
Sans les fuseaux horaires « Amérique/New_York » et « Europe/Berlin », vous obtiendrez une autre différence (6 heures), car PHP supposerait que $dateTimeNY et $dateTimeBerlin proviennent du même fuseau horaire par défaut.
Cela peut paraître évident ici, mais si votre application ne capture pas correctement ces informations, cela peut avoir de mauvaises conséquences.
Bien qu'il soit possible de définir une valeur spécifique pour le fuseau horaire par défaut en PHP, il est généralement préférable d'utiliser UTC, surtout lorsque vous avez différents fuseaux horaires à gérer.
UTC fait référence à « l'époque Unix » et est un format universel.
99,9% du temps, il est recommandé de stocker vos dates en UTC.
De cette façon, vous garderez la cohérence.
Notez que vous devrez utiliser des assistants et des convertisseurs intégrés à PHP pour manipuler ces données, mais toutes les données stockées ne feront référence qu'au même point d'origine (00:00:00 UTC le 1er janvier 1970).
Cela facilite les opérations courantes telles que la comparaison et le tri. Sinon, vous pourriez vous retrouver avec des valeurs qui se ressemblent mais qui ne sont pas implicitement sur la même ligne de base.
GMT signifie Greenwich Mean Time et était autrefois la pierre angulaire des fuseaux horaires.
Techniquement parlant, UTC et GMT indiquent la même heure, mais UTC est plus précis (horloge atomique) et plus cohérent (pas d'heure d'été).
Contrairement à UTC, GMT est un fuseau horaire. Vous l'avez peut-être vu en action avec chaque fuseau horaire ajoutant ou soustrayant des heures à GMT+0.
Ce sont deux normes horaires ayant des objectifs assez similaires, mais l'UTC est plus sophistiqué.
Selon diverses sources, il est abrégé « UTC » car, sinon, ce serait « CUT » en anglais (« Coended Universal Time ») et « TUC » en français (« Temps Universel Coordonné »).
Le zoulou est une norme de temps principalement utilisée par les militaires et les compagnies aériennes.
"Zulu" signifie "Zéro méridien de longitude", ce qui est assez similaire à GMT, mais les militaires et les aviateurs utilisent l'alphabet phonétique au lieu des lettres.
Ce n'est pas un concept critique (contrairement à UTC), mais c'est bon à savoir, et si vous avez réellement besoin de ce format, PHP le supporte :
Y-m-d\TH:i:sp
Le concept de « fuseaux horaires » ne concerne que les humains, pas les machines et les programmes.
Les gouvernements peuvent modifier les « paramètres horaires ». Par exemple, le décalage UTC ou le respect de l'heure d'été (Daylight Time) peuvent varier.
De nombreux autres événements peuvent affecter l’heure globale. Une autre bonne raison d'utiliser le format universel UTC et des convertisseurs standardisés pour travailler avec les fuseaux horaires en programmation.
Carbon est un ensemble d'assistants construits au-dessus de l'objet DateTime natif.
Par conséquent, Carbon prend en charge les fuseaux horaires :
$tomorrow = Carbon::now()->tomorrow()->tz('Europe/Berlin');
Si vous utilisez un framework tel que Laravel, le package Carbon est déjà installé.
L'heure d'été ou l'heure d'été (DST) est un concept essentiel pour de nombreuses applications.
En un mot, les gens changent l’horloge pour mieux utiliser la lumière du jour.
Cela arrive parce que la lumière du jour est généralement plus longue en été (pas partout). C'est pourquoi les gens avancent et reculent les horloges en automne, lorsque la lumière du jour raccourcit à nouveau.
En d’autres termes, l’heure d’été est liée aux heures de lever et de coucher du soleil, qui peuvent être très différentes partout dans le monde.
Vous pouvez récupérer ces variations en utilisant getTransitions() :
$timezone = new DateTimeZone('Europe/Berlin'); $transitions = $timezone->getTransitions(); print_r($transitions);
If you use the latest version of PHP, you will not get this specific bug, but your case can be a known issue.
Read reported bugs and issues, as it might prevent some headaches.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!