IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

fonction date - afficher des heures au délas de 24H


Sujet :

Langage PHP

  1. #1
    Expert éminent
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Points : 8 486
    Points
    8 486
    Par défaut fonction date - afficher des heures au délas de 24H
    J'ai une application qui charge des données dans mysql, champ time. Celui-ci accepte des durées, en heures, supérieure à 24H. Quel intérêt ? Ici définir le nombre d'heure (et de minutes) du travail hebdomadaire, soit entre 18 et 39H ou mensuel... Le type time dans mysql le gère.

    Par contre, sous PHP j'utilise plusieurs couches objets pour les formulaires et l'accès à la base de données. La couche formulaire me vérifie la validité de la saisie (c'est bien une heure) et me retourne la donnée au format HH:MM:SS par défaut à l'aide de la fonction .

    Le paramètre 'H:i:s' est paramétrable. Si j'ai une saisie de 37h30 il va me retourner 13:30:00 ce qui n'est pas bon. J'ai beau avoir démonter google je ne trouve rien de plus que ce qui est dit sur la fonction date().

    Y aurait-il un paramètre inusuel mais efficace qui permettrait de récupérer un 37:30:0 ou un 162:00:00 ?

    Si non, faut que je casse l'objet (ce qui sera plus rapide, mais moins propre).

  2. #2
    Membre régulier
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Juin 2007
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2007
    Messages : 70
    Points : 82
    Points
    82
    Par défaut
    Salut Michel Rotta,

    Je ne pense pas qu'un champ date soit approprié pour le stockage d'une durée. Même si une date en bdd est stockée comme une durée, leurs gestions sont différentes.
    Pourquoi ne pas stocker un temps en secondes ou minutes ? Puis pour un affichage plus sympatique tu utilises une vue ou une fonction stockée pour te convertir cette durée en heure-minutes.

  3. #3
    Expert éminent
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Points : 8 486
    Points
    8 486
    Par défaut
    La zone de stockage en base est de type TIME. Ce type sous MySql est conçu pour gérer des heures (heures, minutes, seconde, centième), les trier, les comparer et calculer dessus.

    La gestion en PHP fonctionne bien. Passer par un champ integer en minutes reviendrait à avoir a réinventer une bonne partie de la roue, ce qui ne me semble pas indispensable.

    La notion de date est trompeuse, la fonction date() permet de mettre un timestamp en forme que ce timestamp (en notion PHP) contienne une date, une date et une heure ou uniquement une heure, c'est la fonction date() qui traite l'affichage, il faut donc comprendre ici date() comme formatage_de_lheure()

    Je pense que je vais ré-écrire le validateur et coder entièrement la restitution de l'heure. Ce sera beaucoup moins lourd que d'avoir à réinventer la roue et les rayons.

    Sauf a trouver le salvateur paramètre qui afficherait la durée au délà de 24h...

  4. #4
    Membre régulier
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Juin 2007
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2007
    Messages : 70
    Points : 82
    Points
    82
    Par défaut
    Je te proposais cela car il me semble non conforme de faire passer une date avec une nombre d'heure > à 24. Ni ton sgbd ni php ne voudra le faire.
    Tant qu'a réinventer la roue tu pourrais tout aussi bien créer un nouveau type de données dans ton sgbd

  5. #5
    Expert éminent
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Points : 8 486
    Points
    8 486
    Par défaut
    Le type TIME de MySql est conçu pour cela avec une amplitude qui va de -839h à +839h soit un peu plus de 34 jours au dessus de 0, largement ce qu'il me faut.

    Faut juste pouvoir faire rentre les données dedans !

  6. #6
    Modérateur
    Avatar de Vil'Coyote
    Homme Profil pro
    Développeur adélia & Web
    Inscrit en
    Février 2008
    Messages
    4 583
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur adélia & Web
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2008
    Messages : 4 583
    Points : 7 503
    Points
    7 503
    Par défaut
    sauf qu'il est bien indiqué dans le lien que tu as fournie. la fonction date ne permet d'avoir une heure que sur 12 ou 24 et pas plus car elle ne sert qu'à récupérer une heure valide et non une durée chose que semblerait il tu attende. donc je pense que la fonction date en elle même ne peut pas réaliser ce que tu souhaite.

  7. #7
    Expert éminent
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Points : 8 486
    Points
    8 486
    Par défaut
    Désolé pour le délais de réponse, quelques jours de vacances loin de sql et php !

    Le manuel dit : "La raison de cet intervalle de validité si large est que les colonnes de type TIME peuvent être utilisés pour représenter non seulement des heures du jour, mais aussi des durées entre deux événements (ce qui peut dépasser largement les 24 heures, ou même, être négatif). " et plus particulièrement : "ce qui peut dépasser largement les 24 heures".

    Je ne vois pas de mention contradictoire dans la page sur des durées qui ne pourraient dépasser les 24H. De plus les formats données parlent bien, en plus des heures d'un nombre de jours, sauf que ceci est donnés pour le SQL, pas pour le PHP

  8. #8
    Membre expérimenté

    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 060
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 060
    Points : 1 357
    Points
    1 357
    Par défaut
    Bonjour,

    Citation Envoyé par Michel Rotta Voir le message
    Faut juste pouvoir faire rentre les données dedans !
    La colonne "duree" de la table contient "24:00:00", soit 24 heures.
    Le formulaire retourne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?php $duree = '37:00:00'; ?>
    Une simple requête permet d'incrémenter la durée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?php
      include('SetPath.php');
     
      $connexion = connexion();
     
      $duree = '37:00:00';
      $sql = 'UPDATE test
              SET duree = ADDTIME(duree, \'' . $duree . '\')';
      mysql_query($sql);
    ?>
    La colonne contient désormais "61:00:00".

    Je ne sais pas si c'est cela que tu recherches, car ton discours contient un mélange de problème d'affichage et de stockage.

  9. #9
    Expert éminent
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Temps réel Embarqué

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 146
    Points : 9 387
    Points
    9 387
    Par défaut
    Citation Envoyé par Michel Rotta Voir le message
    Désolé pour le délais de réponse, quelques jours de vacances loin de sql et php !

    Le manuel dit : "La raison de cet intervalle de validité si large est que les colonnes de type TIME peuvent être utilisés pour représenter non seulement des heures du jour, mais aussi des durées entre deux événements (ce qui peut dépasser largement les 24 heures, ou même, être négatif). " et plus particulièrement : "ce qui peut dépasser largement les 24 heures".

    Je ne vois pas de mention contradictoire dans la page sur des durées qui ne pourraient dépasser les 24H. De plus les formats données parlent bien, en plus des heures d'un nombre de jours, sauf que ceci est donnés pour le SQL, pas pour le PHP
    En fait la fonction date() ne te donnera pas la réponse que tu attends car elle formate une date valide.
    Donc 36h pour lui c'est 24h + 12h donc : le jour suivant à 12h.
    Car une journée de 36h n'existe pas pour lui.

    Je crains donc que tu doives te faire ta propre fonction d'affichage.

  10. #10
    Expert éminent
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Points : 8 486
    Points
    8 486
    Par défaut
    Effectivement, je pense que je vais devoir en passer pour ma propre fonction d'affichage (et de saisie).

    Pour la récupération cela s'annonce un peu plus coton vu que je travail avec doctrine (1.2) et que le blocage semble venir de là, il faut que je vois si je peux facilement rajouter un type de données.

Discussions similaires

  1. [Dates] Afficher à des heures aléatoires ?
    Par kevinf dans le forum Langage
    Réponses: 20
    Dernier message: 02/12/2006, 23h30
  2. Réponses: 7
    Dernier message: 31/10/2006, 00h36
  3. [Dates] Afficher des données à la date du jour
    Par rastatom dans le forum Langage
    Réponses: 10
    Dernier message: 18/05/2006, 11h37
  4. [Date]afficher des dates en boucle
    Par venegan dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 07/12/2005, 17h31
  5. Afficher des heures locales
    Par mrpowerboy dans le forum Applets
    Réponses: 3
    Dernier message: 27/09/2005, 17h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo