Maison  >  Article  >  développement back-end  >  PHP : Comprendre les fuseaux horaires

PHP : Comprendre les fuseaux horaires

王林
王林original
2024-08-06 03:40:41669parcourir

PHP: Understanding Time Zones

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.

Pourquoi s'embêter avec les fuseaux horaires ?

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 :

  • disponibilité des produits
  • réductions
  • expédition

Tout bug finira par nuire à l'entreprise.

Premiers pas avec les fuseaux horaires en PHP

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.

Différence de temps selon les fuseaux horaires

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.

Utilisez UTC, "toujours"

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 contre UTC

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é »).

Qu'est-ce que "Zoulou" ?

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 temps peut changer

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.

Carbone et fuseaux horaires

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é.

Comment gérer l'heure d'été

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);

Known bugs in PHP

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.

Useful links

  • What time is it?
  • PHP doc - Time zones
  • PHP doc - getTransitions()
  • Daylight Time
  • PHP engineer - time zones
  • Military time

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn