Représentation de date en PHP : dépasser la limite de 2038
Bien que les fonctions de date natives de PHP aient une limite à 2038, il existe des approches alternatives pour gérer les dates au-delà de cette limitation. L'une de ces approches consiste à stocker uniquement l'année, le mois et le jour, sans tenir compte des composants heure, minute, seconde et milliseconde.
En supprimant ces composants temporels supplémentaires, vous élargissez considérablement la plage de dates représentables. En effet, chacun de ces composants occupe une partie de la représentation basée sur les millisecondes utilisée en interne par PHP.
Utilisation de la classe DateTime
À cette fin, vous pouvez utilisez la classe DateTime. Contrairement à la fonction date, DateTime représente les composants temporels indépendamment. Il utilise une combinaison d'horodatages et de fuseaux horaires Unix pour stocker et suivre la date.
$date = new DateTime(); $date->setDate(5000, 12, 31); echo $date->format('Y-m-d'); // Outputs "5000-12-31"
Calcul de l'année, du mois et du jour
Avec la classe DateTime, vous pouvez effectuer des calculs sur l'année, le mois, et les composants de jour individuellement. Par exemple, pour ajouter 100 ans à une date :
$date->add(new DateInterval(['y' => 100])); echo $date->format('Y-m-d'); // Outputs "5100-12-31"
En utilisant cette approche, vous pouvez étendre vos calculs de date bien au-delà des limites imposées par la représentation de date par défaut de PHP. Cependant, il est important de noter que la classe DateTime conserve toujours un contexte de fuseau horaire, de sorte que les opérations qui impliquent des fuseaux horaires ou des comparaisons horaires peuvent toujours être soumises à la limitation 2038.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3