recherche
Maisondéveloppement back-endtutoriel phpTravailler avec les dates et les temps dans PHP et MySQL

Working with Dates and Times in PHP and MySQL

La gestion des dates et des temps dans tout langage de programmation est souvent une tâche simple et triviale jusqu'à ce que le fuseau horaire doit être pris en charge. Heureusement, PHP possède un ensemble puissant d'outils de date / temps qui peuvent vous aider à faire face à divers problèmes liés au temps: les horodatages UNIX, les dates de format pour la lecture humaine, les dates d'affichage avec les fuseaux horaires, calculent le décalage horaire d'ici le deuxième mardi du mois prochain, et plus encore. Cet article présentera les bases des fonctions temporelles de PHP (time(), mktime(), et date()) et de leurs homologues orientés objet, puis apprenez les dates de MySQL et vous montrent comment les faire fonctionner parfaitement avec PHP.

gains principaux

  • Gérer efficacement les horodatages UNIX et les dates formatées avec des fonctions de date et de temps puissantes de PHP telles que time(), mktime() et date().
  • Utilisez des objets PHP DateTime et DateTimeZone pour les opérations de date et d'heure orientées objet, y compris la gestion de différents fuseaux horaires.
  • Stockage des dates dans MySQL comme horodatage UNIX pour maintenir la cohérence entre les différents fuseaux horaires et la conversion et le formatage à l'aide de la fonction de date / heure de PHP.
  • Définissez le fuseau horaire par défaut du serveur sur UTC dans la configuration PHP pour simplifier la gestion de la date et de l'heure et assurez la cohérence de l'application.

Fonction de date et d'heure PHP

La plupart de cet article utilisera Unix Time, également connu sous le nom de temps POSIX ou de temps d'époque. Le temps est exprimé comme le nombre de secondes écoulé depuis minuit UTC le 1er janvier 1970. Si vous êtes intéressé par l'historique complet d'Unix Time, consultez l'article Unix Time sur Wikipedia. L'UTC (temps universel coordonné), également connu sous le nom de GMT, est le temps de la ligne de longitude à 0 degrés. Tous les autres fuseaux horaires du monde sont représentés comme des compensations positives ou négatives par rapport à cette époque. L'utilisation du temps UTC et UNIX pour traiter le temps vous facilitera la vie lorsque vous devez traiter les fuseaux horaires. Je vais y entrer en détail plus tard, mais pour l'instant, ignorons le problème du fuseau horaire et regardons des fonctions de temps.

Obtenez le temps Unix actuel

time() n'accepte aucun paramètre et renvoie le nombre de secondes depuis l'époque Unix. Pour illustrer cela, j'utiliserai la coque CLI interactive PHP.

sean@beerhaus:~$ php -a
php > print time();
1324402770

Si vous avez besoin d'une représentation de tableau d'Unix Time, utilisez la fonction getdate(). Il accepte un paramètre d'horodatage UNIX facultatif, mais par défaut une valeur de time() s'il n'est pas fourni.

php > $unixTime = time();
php > print_r(getdate($unixTime));
Array
(
    [seconds] => 48
    [minutes] => 54
    [hours] => 12
    [mday] => 20
    [wday] => 2
    [mon] => 12
    [year] => 2011
    [yday] => 353
    [weekday] => Tuesday
    [month] => December
    [0] => 1324403688
)

Format Unix Time

Le temps UNIX peut être facilement formaté pour n'importe quelle chaîne que les humains souhaitent lire. date() est utilisé pour formater les horodatages UNIX en chaînes lisibles par l'homme et accepter un paramètre de format et un paramètre de temps facultatif. Si aucun horodatage facultatif n'est fourni, la valeur de time() est utilisée.

sean@beerhaus:~$ php -a
php > print time();
1324402770

"R" La chaîne de format renvoie le temps de formatage spécifié par RFC 2822. Bien sûr, vous pouvez utiliser d'autres spécificateurs pour définir votre propre format personnalisé.

php > $unixTime = time();
php > print_r(getdate($unixTime));
Array
(
    [seconds] => 48
    [minutes] => 54
    [hours] => 12
    [mday] => 20
    [wday] => 2
    [mon] => 12
    [year] => 2011
    [yday] => 353
    [weekday] => Tuesday
    [month] => December
    [0] => 1324403688
)

Voir la page de date() dans la documentation PHP pour une liste complète de caractères formatés acceptables. Cependant, lorsqu'il est utilisé en conjonction avec les fonctions mktime() et strtotime(), la fonction devient plus utile, comme vous le verrez dans les exemples suivants.

Créer un temps UNIX en fonction d'un temps donné

mktime() est utilisé pour créer des horodatages UNIX basés sur une liste de valeurs (secondes, minutes, heures, années, etc.) correspondant à chaque partie de la date. Il accepte de nombreux paramètres entiers, définissant chaque partie de la date dans l'ordre suivant:

php > print date("r", $unixTime);
Tue, 20 Dec 2011 12:54:48 -0500

Définir isDST sur 1 si le temps de sauvegarde est activé;

php > print date("m/d/y h:i:s a", $unixTime);
12/20/11 12:54:48 pm
php > print date("m/d/y h:i:s a");
12/20/11 01:12:11 pm
php > print date("jS of F Y", $unixTime);
20th of December 2011

Vous pouvez voir que mktime() est très utile lors de la gestion des requêtes de base de données à l'aide de plages de date définies par l'utilisateur. Par exemple, si vous stockez des horodatages en tant qu'entiers (temps Unix) dans MySQL (préfigure n'importe qui?), Il est facile de définir une gamme de requêtes de l'année courante.

<code>mktime(hour, minute, second, month, day, year, isDST)</code>

Résoudre les dates anglaises à Unix Time

Fonction presque magique strtotime() prend une chaîne au format de date / temps comme premier argument, et un horodatage Unix utilisé comme base de conversion. Veuillez vous référer à la documentation pour les formats de date acceptables.

php > print date("r", mktime(12, 0, 0, 1, 20, 1987));
Tue, 20 Jan 1987 12:00:00 -0500
php > print date("r", mktime(0, 0, 0, date("n"), date("j"), date("Y")));
Tue, 20 Dec 2011 00:00:00 -0500
php > print date("r", mktime(23, 59, 59, date("n"), date("j"), date("Y")));
Tue, 20 Dec 2011 23:59:59 -0500

Les objets DateTime et DateTimeZone de PHP

L'objet

PHP DateTime est une méthode orientée objet qui gère les dates et les fuseaux horaires. Le constructeur accepte une représentation de chaîne du temps, très similaire à ce qui précède strtotime(), que certaines personnes peuvent trouver plus facile à utiliser. Si aucun paramètre n'est fourni, la valeur par défaut est "maintenant".

<?php $startTime = mktime(0, 0, 0, 1, 1, date("y"));
$endTime   = mktime(0, 0, 0, date("m"), date("d"), date("y"));
La méthode

DateTime de format() fonctionne de la même manière que la fonction date() ci-dessus et accepte tous les mêmes caractères formatés. L'objet DateTime est également livré avec des constantes utiles qui peuvent être alimentées à la méthode format().

php > print strtotime("now");
1324407707
php > print date("r", strtotime("now"));
Tue, 20 Dec 2011 14:01:51 -0500
php > print strtotime("+1 week");
1325012569
php > print date("r", strtotime("+1 week"));
Tue, 27 Dec 2011 14:03:03 -0500
php > print date("r", strtotime("next month"));
Fri, 20 Jan 2012 14:04:20 -0500
php > print date("r", strtotime("next month", mktime(0, 0, 0)));
Fri, 20 Jan 2012 00:00:00 -0500
php > print date("r", strtotime("next month", mktime(0, 0, 0, 1, 31)));
Thu, 03 Mar 2011 00:00:00 -0500

La liste complète des constantes peut être trouvée sur la page DateTime Document. Étant donné que nous traiterons bientôt du fuseau horaire, fournissons un fuseau horaire par défaut pour PHP. Dans votre fichier de configuration php.ini (j'en ai un pour CLI et un pour Apache), trouvez la section comme indiqué ci-dessous:

php > $dt = new DateTime("now"); 
php > print $dt->format("r");
Tue, 20 Dec 2011 16:28:32 -0500
php > $dt = new DateTime("December 31 1999 12:12:12 EST");
php > print $dt->format("r");
Fri, 31 Dec 1999 12:12:12 -0500

Lorsqu'aucune valeur n'est attribuée à date.timezone, PHP fera de son mieux pour déterminer le fuseau horaire du système réglé sur le serveur. Vous pouvez utiliser date_default_timezone_get() pour vérifier quelle valeur PHP utilise.

sean@beerhaus:~$ php -a
php > print time();
1324402770

Définissons le fuseau horaire du serveur sur UTC Time (date.timezone = UTC) et enregistrons le fichier de configuration. Vous devez redémarrer Apache ou Shell CLI pour afficher les modifications. L'objet PHP DateTime comprend une instance de classe DateTimeZone interne pour suivre le fuseau horaire. Lorsque vous créez une nouvelle instance de DateTime, l'interne DateTimeZone doit être défini sur la valeur par défaut fournie dans php.ini.

php > $unixTime = time();
php > print_r(getdate($unixTime));
Array
(
    [seconds] => 48
    [minutes] => 54
    [hours] => 12
    [mday] => 20
    [wday] => 2
    [mon] => 12
    [year] => 2011
    [yday] => 353
    [weekday] => Tuesday
    [month] => December
    [0] => 1324403688
)

La liste complète des noms de fuseau horaire acceptables peut être trouvée sur la page du document de fuseau horaire. Vous pouvez maintenant voir la différence de temps où deux objets DateTime reçoivent des fuseaux horaires différents. Par exemple, voici un exemple de conversion de l'UTC en America / New_york (EST).

php > print date("r", $unixTime);
Tue, 20 Dec 2011 12:54:48 -0500

Veuillez noter le décalage -0500 en décembre. Si vous modifiez la valeur du temps à une date d'été, comme le 1er juillet, vous constaterez qu'il connaît l'heure d'été (EDT).

php > print date("m/d/y h:i:s a", $unixTime);
12/20/11 12:54:48 pm
php > print date("m/d/y h:i:s a");
12/20/11 01:12:11 pm
php > print date("jS of F Y", $unixTime);
20th of December 2011

Utilisez des dates avec MySQL et PHP

Si vous avez utilisé MySQL à n'importe quel niveau, vous avez peut-être remarqué le type DateTime qui fonctionne hors de la boîte. Il ressemble et sent un rendez-vous, et si vous dites que c'est une date, vous avez raison. Cependant, une fois que vous l'avez sélectionné parmi MySQL dans PHP, tout ce que vous avez est une chaîne qui ressemble à une date. Il n'a pas de conscience de fuseau horaire et est formaté pour un usage humain avant que les humains ne doivent le voir. Oui, je sais que MySQL a beaucoup de fonctions de formatage de date, mais nous utilisons déjà PHP, et comme vous pouvez le voir, PHP est excellent dans les formats de date de traitement. Pourquoi devons-nous également le formater directement à partir de la base de données? Nous devrons peut-être appliquer différentes conversions et formats. Il est préférable de formater la date que lorsque les humains sont sur le point de le voir.

<code>mktime(hour, minute, second, month, day, year, isDST)</code>

Exécutez ce script simple et vous pouvez voir que tout ce que vous obtenez à partir du champ DateTime est une chaîne formatée sans aucune information de fuseau horaire.

php > print date("r", mktime(12, 0, 0, 1, 20, 1987));
Tue, 20 Jan 1987 12:00:00 -0500
php > print date("r", mktime(0, 0, 0, date("n"), date("j"), date("Y")));
Tue, 20 Dec 2011 00:00:00 -0500
php > print date("r", mktime(23, 59, 59, date("n"), date("j"), date("Y")));
Tue, 20 Dec 2011 23:59:59 -0500

La valeur DateTime est l'heure locale du serveur exécutant MySQL, quel que soit le fuseau horaire de ce serveur. Si tout ce que vous faites implique un seul serveur dans un fuseau horaire, alors DateTime peut convenir à la plupart de vos besoins, et je vous envoie très envie. Alors, comment puis-je utiliser PHP et MySQL pour gérer les dates et les fuseaux horaires? Stockez les dates en tant qu'horodatrices UNIX. Vous savez déjà que Unix Time est le nombre de secondes depuis UTC le 1er janvier 1970, donc cela vous donne un fuseau horaire constant, et vous avez peut-être remarqué que de nombreuses fonctions de date / temps de PHP sont basées sur des horodatages UNIX. Lorsque je utilise MySQL, je crée généralement une colonne de table qui stocke les dates comme entier non signé. Lors de l'insertion d'une date, vous pouvez utiliser PHP time() ou MySQL UNIX_TIMESTAMP().

<?php $startTime = mktime(0, 0, 0, 1, 1, date("y"));
$endTime   = mktime(0, 0, 0, date("m"), date("d"), date("y"));

Si vous voulez que MySQL forme des dates, vous pouvez le faire. Mais le temps sera dans le fuseau horaire du serveur exécutant MySQL, et je vous recommande de ne pas faire de formatage avant d'atteindre le niveau de modèle / vue de votre application Web et d'être prêt à le voir.

sean@beerhaus:~$ php -a
php > print time();
1324402770

Dans toute application qui s'étend sur les fuseaux horaires, vous avez généralement une table qui suit les paramètres de fuseau horaire personnalisés de l'utilisateur, puis le lit dans la valeur $_SESSION. Supposons que vous ayez une entrée de session comme indiqué ci-dessous:

php > $unixTime = time();
php > print_r(getdate($unixTime));
Array
(
    [seconds] => 48
    [minutes] => 54
    [hours] => 12
    [mday] => 20
    [wday] => 2
    [mon] => 12
    [year] => 2011
    [yday] => 353
    [weekday] => Tuesday
    [month] => December
    [0] => 1324403688
)

Vous pouvez facilement convertir les temps UNIX stockés (en UTC) en n'importe quelle date dans le fuseau horaire d'un utilisateur spécifique.

php > print date("r", $unixTime);
Tue, 20 Dec 2011 12:54:48 -0500

Cela entraînera la date "Lun, 16 janvier 2012 12:03:49 -0600". -0600 vous indique qu'il est à 6 heures derrière UTC et que le décalage de l'UTC est 0. Si nous définissons le fuseau horaire sur America / Los_Angeles, la date générée sera:

php > print date("m/d/y h:i:s a", $unixTime);
12/20/11 12:54:48 pm
php > print date("m/d/y h:i:s a");
12/20/11 01:12:11 pm
php > print date("jS of F Y", $unixTime);
20th of December 2011

et America / New_york générera:

<code>mktime(hour, minute, second, month, day, year, isDST)</code>

Résumé

Les dates de gestion et les fuseaux horaires font partie de la vie quotidienne de nombreux programmeurs, mais il n'est pas nécessaire de vous inquiéter lorsque vous pouvez utiliser la bibliothèque de dattes puissante et facile à utiliser de PHP. Vous avez appris à obtenir des horodatages Unix, comment formater les dates dans n'importe quel format imaginable, comment analyser la représentation anglaise des dates dans les horodatages, comment ajouter une période de temps aux horodatages et comment convertir entre les fuseaux horaires. S'il y a deux points principaux dans cet article, il est 1) de s'en tenir au temps UNIX, et 2) de s'en tenir à l'UTC comme fuseau horaire de base pour toutes les dates lors de l'utilisation de PHP et MySQL. L'idée de tous les temps basée sur UTC n'est pas seulement applicable à PHP et MySQL; Si vous vous retrouvez à travailler dans une autre langue, il y a de fortes chances que vous vous disiez: "Merde, pourquoi ne peuvent-ils pas faire de même que PHP?"

Images de Yakobchuk Vasyl / Shutterstock

(La section FAQ doit être ajoutée ici sur la section FAQ pour gérer les dates et les heures de PHP, similaire à la section FAQ dans le texte d'entrée. Je ne l'ai pas ajouté ici en raison des limitations de l'espace.)

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
PHP Dependency Injection Container: un démarrage rapidePHP Dependency Injection Container: un démarrage rapideMay 13, 2025 am 12:11 AM

AphpdependencyInjectionContaineeRisatool That ManageSclassDensences, améliorant le codemodularité, la testabilité et la participation.

Injection de dépendance vs localisateur de service en PHPInjection de dépendance vs localisateur de service en PHPMay 13, 2025 am 12:10 AM

Sélectionnez DependencyInjection (DI) Pour les grandes applications, le service de service convient aux petits projets ou prototypes. 1) DI améliore la testabilité et la modularité du code par injection de constructeur. 2) Servicelocator obtient des services par l'enregistrement du centre, ce qui est pratique mais peut entraîner une augmentation du couplage du code.

Stratégies d'optimisation des performances PHP.Stratégies d'optimisation des performances PHP.May 13, 2025 am 12:06 AM

PhpapplicationsCanBeoptimizedForsPeedAndFiciency: 1) AutoringOpCacheInphp.ini, 2) Utilisation de PreparedStatementswithpodOrdatabasequeries, 3) Remplacingloopswitray_filterandArray_Mapfordataprocessing, 4) Configurationnginxasareproxy, 5)

Validation des e-mails PHP: garantir que les e-mails sont envoyés correctementValidation des e-mails PHP: garantir que les e-mails sont envoyés correctementMay 13, 2025 am 12:06 AM

PhpemailvalidationInvolvesthestreps: 1) formatvalidationusinggularexpressionstochecktheemailformat; 2) dnsvalidationtoensethedomainhasavalidmxrecord; 3) smtpvalidation, themostthoroughMethod.

Comment faire des applications PHP plus rapidementComment faire des applications PHP plus rapidementMay 12, 2025 am 12:12 AM

TomakePhpApplicationsFaster, suivez lesEsthets: 1) useopCodeCachingLikeOpcachetOsToreprecCompileScriptByteCode.2) MinimizedatabaseQueriesByusingSingQueryCachingAndefficientIndexing.3) Levier

Liste de contrôle d'optimisation des performances PHP: améliorez la vitesse maintenantListe de contrôle d'optimisation des performances PHP: améliorez la vitesse maintenantMay 12, 2025 am 12:07 AM

TOIMPROVEPHPAPPLICATIONSPEED, SuivreSesEtsts: 1) Activer le codécachement de la codécaching avec un accumulation de dotation

Injection de dépendance PHP: améliorer la testabilité du codeInjection de dépendance PHP: améliorer la testabilité du codeMay 12, 2025 am 12:03 AM

L'injection de dépendance (DI) améliore considérablement la testabilité du code PHP par des dépendances explicitement transitives. 1) Les classes de découplage en DI et les implémentations spécifiques rendent les tests et la maintenance plus flexibles. 2) Parmi les trois types, le constructeur injecte des dépendances d'expression explicites pour maintenir l'état cohérent. 3) Utilisez des conteneurs DI pour gérer les dépendances complexes pour améliorer la qualité du code et l'efficacité de développement.

Optimisation des performances PHP: optimisation des requêtes de base de donnéesOptimisation des performances PHP: optimisation des requêtes de base de donnéesMay 12, 2025 am 12:02 AM

DatabaseQueryOptimizationInphpinvolveSeveralStrategieSoenhancePerformance.1) selectOnlyneceSaryColumnStoredatatransfer.2) useIndexingTospeeDupDatareTeval.3) ImplémentQueryCachingTostoreResul

See all articles

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

<🎜>: Bubble Gum Simulator Infinity - Comment obtenir et utiliser les clés royales
3 Il y a quelques semainesBy尊渡假赌尊渡假赌尊渡假赌
Nordhold: Système de fusion, expliqué
3 Il y a quelques semainesBy尊渡假赌尊渡假赌尊渡假赌
Mandragora: Whispers of the Witch Tree - Comment déverrouiller le grappin
3 Il y a quelques semainesBy尊渡假赌尊渡假赌尊渡假赌

Outils chauds

VSCode Windows 64 bits Télécharger

VSCode Windows 64 bits Télécharger

Un éditeur IDE gratuit et puissant lancé par Microsoft

Version Mac de WebStorm

Version Mac de WebStorm

Outils de développement JavaScript utiles

mPDF

mPDF

mPDF est une bibliothèque PHP qui peut générer des fichiers PDF à partir de HTML encodé en UTF-8. L'auteur original, Ian Back, a écrit mPDF pour générer des fichiers PDF « à la volée » depuis son site Web et gérer différentes langues. Il est plus lent et produit des fichiers plus volumineux lors de l'utilisation de polices Unicode que les scripts originaux comme HTML2FPDF, mais prend en charge les styles CSS, etc. et présente de nombreuses améliorations. Prend en charge presque toutes les langues, y compris RTL (arabe et hébreu) ​​et CJK (chinois, japonais et coréen). Prend en charge les éléments imbriqués au niveau du bloc (tels que P, DIV),

Adaptateur de serveur SAP NetWeaver pour Eclipse

Adaptateur de serveur SAP NetWeaver pour Eclipse

Intégrez Eclipse au serveur d'applications SAP NetWeaver.

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit