Conversion d'heure

Réduire
X
 
  • Filtrer
  • Heure
  • Afficher
Tout effacer
nouveaux messages

  • [RÉGLÉ] Conversion d'heure

    Bonjour,

    Dans un script manuel ou par tâche cron, je ne veux utiliser son exécution qu'après vérification qu'une sauvegarde de la base de données a bien été faite dans l'heure précédant le lancement.
    J'interroge donc la table des backups d'Akeeba pour récupérer la date de la dernière sauvegarde et la comparer à l'heure actuelle. J'ai donc
    Code:
     $datenow = new DateTime("now");
    $datebkp = new DateTime($row["backupend"]);
    $interval = date_diff($datebkp, $datenow);
    L'ennui est que sur le serveur du site concerné, now me renvoie l'heure locale et la table Akeeba une heure UTC, et donc je n'ai pas de certitude de la différence réelle selon les périodes de l'années. Je ne trouve pas comment ramener l'heure que now renvoie au même fuseau que celle enregistrée par Akeeba.
    Que me conseillez-vous ?
    "Patience et longueur de temps font plus que force ni que rage..." (La Fontaine : Le Lion et le Rat) - "Il n'y a pas de problèmes; il n'y a que des solutions" (André Gide).
    MoovJla et LazyDbBackup sur www.joomxtensions.com - FaQ sur www.fontanil.info - Site pro : www.robertg-conseil.fr chez PHPNET, sites perso chez PlanetHoster + sites gérés chez PHPNET, PlanetHoster, Ionos et OVH

  • #2
    salut,

    une piste :
    Joomla n'a pas une variable reprenant soit l'heure locale soit l'heure utc ?
    aidons nous les uns les autres ...

    https://www.web54.fr

    Commentaire


    • #3
      C'est un script non intégré à Joomla!
      Un script comparable (dont je me suis servi pour l'adapter à cette nouvelle tâche) chez un autre hébergeur ne me pose pas ce problème, les heures sont au même fuseau.
      "Patience et longueur de temps font plus que force ni que rage..." (La Fontaine : Le Lion et le Rat) - "Il n'y a pas de problèmes; il n'y a que des solutions" (André Gide).
      MoovJla et LazyDbBackup sur www.joomxtensions.com - FaQ sur www.fontanil.info - Site pro : www.robertg-conseil.fr chez PHPNET, sites perso chez PlanetHoster + sites gérés chez PHPNET, PlanetHoster, Ionos et OVH

      Commentaire


      • #4
        Hello.
        joomla stocke toujours les heures en UTC voir :
        Société Alsacienne de prestation en informatique, automatisme et domotique.

        Regarde du côté de jdate.

        DAns l'immédiat je ne peux te répondre + précisément je ne suis pas chez moi
        A tous les utilisateurs de Joomla du très Grand Est de la France et du Jura suisse
        Rejoignez le Joomla Users Groupe Alsace...
        roland_d_alsace va-t-il devenir roland_du_grand_est ?

        Commentaire


        • #5
          Oui, Joomla! se sert du fuseau horaire défini dans la configuration, pour convertir en UTC. Mais là, le script est indépendant et son rôle est de supprimer dans la base tous les visiteurs indésirables (dernière visite de plus de 6 mois et aucune commande dans la boutique) et il faut que la sauvegarde soit la plus proche possible du lancement du script, au cas où il y aurait un pépin lors de son exécution. Aujourd'hui pour que ça fonctionne, je suis obligé de fixer le nombre d'heures à 3 pour m'assurer qu'une sauvegarde a été faite dans l'heure précédente, mais il faudrait que je modifie à 2 heures lors du changement pour l'heure d'hiver et remettre 3 au printemps. Autant trouver comment ramener l'heure locale en UTC et je n'ai pas été fichu de trouver comment faire.
          "Patience et longueur de temps font plus que force ni que rage..." (La Fontaine : Le Lion et le Rat) - "Il n'y a pas de problèmes; il n'y a que des solutions" (André Gide).
          MoovJla et LazyDbBackup sur www.joomxtensions.com - FaQ sur www.fontanil.info - Site pro : www.robertg-conseil.fr chez PHPNET, sites perso chez PlanetHoster + sites gérés chez PHPNET, PlanetHoster, Ionos et OVH

          Commentaire


          • #6
            Hello,

            Pour lire une date joomla et la convertir ou pas en time locale, en tenant compte de l'heure été/hiver, il est conseillé d'utiliser HTMLHelper::date()

            Code PHP:
            use Joomla\CMS\HTML\HTMLHelper;
            ...
            // si heure de la donnée fournie en UTC (et config Joomla en UTC)
            $sDateJoomla "2022-09-30 14:30:12"// heure extrait de la BD (UTC)
            $dateJour1 HtmlHelper::date($sDateJoomla'd/m/Y à H\hi 'true);
            echo 
            $dateJour1//=30/09/2022 à 14h30

            // si heure de la donnée fournie en UTC (et config Joomla locale 'Paris')
            $sDateJoomla "2022-09-30 14:30:12"// heure extrait de la BD(UTC)
            $dateJour2 HtmlHelper::date($sDateJoomla'd/m/Y à H\hi 'true);
            echo 
            $dateJour2//=30/09/2022 à 16h30 
            Pour plus d'info sur le 3eme param 'timezone, voir API :

            Garstud Workshop - Concepteur, Développeur et Formateur Joomla - http://www.garstud.com
            « Ce n’est pas parce que les choses sont difficiles que nous n’osons pas,
            c’est parce que nous n’osons pas qu’elles sont difficiles. »
            - Sénèque

            Commentaire


            • #7
              Merci, mais je répète que ce n'est pas une extension Joomla! mais un script autonome destiné à supprimer des lignes dans une table Joomla!, je ne suis donc pas sûr que cet appel de fonction soit utilisable même en plaçant le script dans un dossier du site.
              Je pensais qu'il y avait une fonction PHP pour ça.
              "Patience et longueur de temps font plus que force ni que rage..." (La Fontaine : Le Lion et le Rat) - "Il n'y a pas de problèmes; il n'y a que des solutions" (André Gide).
              MoovJla et LazyDbBackup sur www.joomxtensions.com - FaQ sur www.fontanil.info - Site pro : www.robertg-conseil.fr chez PHPNET, sites perso chez PlanetHoster + sites gérés chez PHPNET, PlanetHoster, Ionos et OVH

              Commentaire


              • #8
                C'est hélas ce que je craignais :
                Fatal error: Uncaught Error: Class "Joomla\CMS\HTML\HTMLHelper" not found
                Sur mon site de test, le script est à cette adresse : /administrator/purge/del_indesirables.php
                Mais ce qui est étonnant, c'est qu'il est capable d'utiliser JConfig pour récupérer les infos d'accès à la base.
                "Patience et longueur de temps font plus que force ni que rage..." (La Fontaine : Le Lion et le Rat) - "Il n'y a pas de problèmes; il n'y a que des solutions" (André Gide).
                MoovJla et LazyDbBackup sur www.joomxtensions.com - FaQ sur www.fontanil.info - Site pro : www.robertg-conseil.fr chez PHPNET, sites perso chez PlanetHoster + sites gérés chez PHPNET, PlanetHoster, Ionos et OVH

                Commentaire


                • #9
                  Ok compris ... dans ce cas, plutot que de faire du script PHP externe, je te conseille vivement de faire un JCLI , un Joomla Command Line Interface (y a des exemples dans le dossier /cli de Joomla).


                  Tu fais un script /cli/delindesirables.php , avec une classe :
                  Code PHP:
                  class DelIndesirablesCli extends CliApplication 

                  qui contient une méthode d'appel :
                  Code PHP:
                  public function doExecute() { ... 
                  et hop, tu as juste a utiliser ton code Joomla habituel ... comme dans tout autre dev d'extensions Joomla (Factory::getDBO(), ....LoadObjectlist() ....)

                  Et tu peux alors l'appeler dans une tache CRON :
                  Code:
                  php /path_complet/public_html/cli/delindesirables.php
                  J'espere que cela t'aide davantage
                  Dernière édition par garstud à 30/09/2022, 17h52
                  woluweb aime ceci.
                  Garstud Workshop - Concepteur, Développeur et Formateur Joomla - http://www.garstud.com
                  « Ce n’est pas parce que les choses sont difficiles que nous n’osons pas,
                  c’est parce que nous n’osons pas qu’elles sont difficiles. »
                  - Sénèque

                  Commentaire


                  • #10
                    J'essaierai, merci !
                    Entretemps, j'ai essayé :
                    Code:
                     $datenow = new DateTime("now", new DateTimeZone('Europe/Paris')); echo "now : ".$datenow->format('Y-m-d H:i:s') . "<br/>";
                    echo "base : ". $row["backupend"] . "<br/";
                    $datebkp = new DateTime($row["backupend"], new DateTimeZone('UTC')); echo "datebkp : ". $datebkp->format('Y-m-d H:i:s') ."<br/>";
                    $datebkp = new DateTime($row["backupend"], new DateTimeZone('UTC')); echo "datebkp : ". $datebkp->format('Y-m-d H:i:s') ."<br/>";
                    mais je n'ai pas de conversion, et une seule ligne pour datebakp ! Si je supprime une des deux ligne pour cette valeur, je n'obtiens pas d'affichage de la valeur
                    now : 2022-09-30 18:52:47
                    base : 2022-09-30 16:39:39
                    datebkp : 2022-09-30 16:39:39
                    J'avance ! A force de recherches, j'ai touvé un exemple et je l'ai adapté !
                    Code:
                    $date = new DateTime($row["backupend"], new DateTimeZone('UTC'));
                    echo $date->format('Y-m-d H:i:sP') . "<br/>";
                    
                    $date->setTimezone(new DateTimeZone('Europe/Paris'));
                    echo $date->format('Y-m-d H:i:sP') . "<br/>";
                    Et je récupère
                    2022-09-30 16:39:39+00:00
                    2022-09-30 18:39:39+02:00
                    Je devrais donc arriver à comparer les deux dates au même fuseau horaire.
                    Dernière édition par RobertG à 30/09/2022, 18h09
                    garstud aime ceci.
                    "Patience et longueur de temps font plus que force ni que rage..." (La Fontaine : Le Lion et le Rat) - "Il n'y a pas de problèmes; il n'y a que des solutions" (André Gide).
                    MoovJla et LazyDbBackup sur www.joomxtensions.com - FaQ sur www.fontanil.info - Site pro : www.robertg-conseil.fr chez PHPNET, sites perso chez PlanetHoster + sites gérés chez PHPNET, PlanetHoster, Ionos et OVH

                    Commentaire


                    • #11
                      Bonjour,

                      Problème réglé sur ce point, reste à tester sur une copie du site concerné, mais il ne devrait plus y avoir d'erreur.
                      Merci de votre aide !
                      (faudra que je me décide à essayer d'écrire un plugin de A à Z, mais aussi à tester les tâches automatisées récemment incluses dans Joomla!)
                      garstud et woluweb aiment ceci.
                      "Patience et longueur de temps font plus que force ni que rage..." (La Fontaine : Le Lion et le Rat) - "Il n'y a pas de problèmes; il n'y a que des solutions" (André Gide).
                      MoovJla et LazyDbBackup sur www.joomxtensions.com - FaQ sur www.fontanil.info - Site pro : www.robertg-conseil.fr chez PHPNET, sites perso chez PlanetHoster + sites gérés chez PHPNET, PlanetHoster, Ionos et OVH

                      Commentaire

                      Annonce

                      Réduire
                      Aucune annonce pour le moment.

                      Partenaire de l'association

                      Réduire

                      Hébergeur Web PlanetHoster
                      Travaille ...
                      X