|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
![]() ![]() Michel RottaResponsable d'exploitation informatique Inscription : septembre 2005 Messages : 4 913 ![]() |
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).
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
|
|
00
|
|
|
#2 |
|
Membre régulier
![]() Chef de projet NTIC Inscription : juin 2007 Messages : 69 ![]() |
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. |
|
|
00
|
|
|
#3 |
![]() ![]() Michel RottaResponsable d'exploitation informatique Inscription : septembre 2005 Messages : 4 913 ![]() |
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...
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
|
|
00
|
|
|
#4 |
|
Membre régulier
![]() Chef de projet NTIC Inscription : juin 2007 Messages : 69 ![]() |
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 |
|
|
00
|
|
|
#5 |
![]() ![]() Michel RottaResponsable d'exploitation informatique Inscription : septembre 2005 Messages : 4 913 ![]() |
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 !
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
|
|
00
|
|
|
#6 |
![]() ![]() Développeur Web Inscription : février 2008 Messages : 3 302 ![]() |
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.
|
|
|
00
|
|
|
#7 |
![]() ![]() Michel RottaResponsable d'exploitation informatique Inscription : septembre 2005 Messages : 4 913 ![]() |
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
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
|
|
00
|
|
|
#8 | ||
|
Membre Expert
![]() Inscription : août 2002 Messages : 1 036 ![]() |
Bonjour,
La colonne "duree" de la table contient "24:00:00", soit 24 heures. Le formulaire retourne : Une simple requête permet d'incrémenter la durée : Code :
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. |
||
|
|
00
|
|
|
#9 | |
|
Membre Expert
![]() Baptiste ROUSSELÉtudiant Inscription : janvier 2011 Messages : 802 ![]() |
Citation:
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. |
|
|
|
00
|
|
|
#10 |
![]() ![]() Michel RottaResponsable d'exploitation informatique Inscription : septembre 2005 Messages : 4 913 ![]() |
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.
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
|
|
00
|
Copyright © 2000-2012 - www.developpez.com