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 :

[Dates] Soustraire une heure [Fait]


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 149
    Points : 48
    Points
    48
    Par défaut [Dates] Soustraire une heure
    Bonjour je voudrais soustraire une l'heure actuelle a heur enregistré.

    J'ai essayé ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    $reqhy = mysql_query("SELECT * FROM membre WHERE team='".$data['team']."'");   
    $myrow = mysql_fetch_array($reqhy);
     
    $tuto=date("H:i:s");
     
    $cap=$myrow["depart"];
     
     echo date('H:i:s',$tuto-$cap);
    qui m'afiche 01:00:00 tout le temps

    Merci

  2. #2
    Membre du Club
    Inscrit en
    Septembre 2006
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 69
    Points : 67
    Points
    67
    Par défaut
    Salut,

    Dans quel format tes dates sont-elles enregistrées dans ta base de données ?
    Le plus efficace est de travailler avec des timestamps unix. Tu stockes la date au format timestamp dans ta base. Quand tu la récupères, tu lui soustrais la date actuelle (résultat de time() ), et tu convertis avec date() au format de ton choix.

    Je ne sais pas comment chacun fonctionne, mais pour ma part, je n'utilise que des itmestamps unix pour tout ce qui concerne les dates et les heures. Cela facilite grandement les calculs, jamais besoin de se casser la tête à convertir plusieurs fois, et en plus, si des utilisateurs veulent utiliser un format différent, c'est faisable avec une ligne de code.

    Concrètement, pour ton script tu génères un timestamp unix avec la fonction time() quand ton membre s'inscrit, rend visite, etc, et tu le stockes alors dans ce format là dans ta base de données.
    Ensuite, ça donne ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $reqhy = mysql_query("SELECT * FROM membre WHERE team='".$data['team']."'");
    $myrow = mysql_fetch_array($reqhy);
    // C'est là la différence majeure :
    $tuto=time();
    $cap=$myrow["depart"];
    echo date('H:i:s',$tuto-$cap);
    La fonction date prend en arguments :
    - le format dans lequel afficher la date
    - un timestamp unix à convertir

    Utilisation de la fonction date : http://fr.php.net/manual/fr/function.date.php
    Utilisation de la fonction time : http://fr.php.net/manual/fr/function.time.php
    On imagine rarement les ressources que l'on peut trouver ici

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 149
    Points : 48
    Points
    48
    Par défaut
    Dans ma base de donné depart est sous la forme 00:00:00

    Ton code m'affiche bisarment l'heure du serveur uniquement et ne prend pas en compte 'depart'

  4. #4
    Membre du Club
    Inscrit en
    Septembre 2006
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 69
    Points : 67
    Points
    67
    Par défaut
    C'est pour cela que je te recommande de stocker tes dates/heures en tant que timestamp unix dans ta base de données => ça a pour effet de rendre les calcules sur les dates plus simples.

    Par ailleurs, je t'ai dit que la fonction date() prend en argument une chaine de caractères représentant le format d'affichage, et une date au format timestamp.
    Tu ne peux pas soustraire un timestamp d'une date formattée. Ce serait comme soustraire des carottes à des patates, ou des écrans à des souris, ou... Ca n'a pas de sens. Tu ne peux soustraire que des données de même type.
    On imagine rarement les ressources que l'on peut trouver ici

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 149
    Points : 48
    Points
    48
    Par défaut
    Je ne trouve pas de solution malgrès tes explications.

  6. #6
    Membre du Club
    Inscrit en
    Septembre 2006
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 69
    Points : 67
    Points
    67
    Par défaut
    Re,

    J'ai du mal à faire plus clair. Je vais quand même tenter.

    La date que tu stockes dans ta base de données, il a bien fallu qu'un script aille l'y mettre. Au lieu de la stocker dans un format formaté, utilise un timestamp unix. Ca se génère assez facilement avec la fonction mktime(), à laquelle tu peux ou non passer une date en argument. Toutes les explications sur ça, dans la doc php (c'est une lecture intéressante, elle vaut le coup).

    Ensuite, quand tu vas récupérer l'heure, avec le script que tu nous montre ici, tu récupères donc un timestamp unix, forcément, c'est ce que tu as stocké dans ta base.

    Tu regénères un timestamp de la date actuelle.
    Tu fais la soustraction et stockes le résultat dans une variable.
    Tu convertis le contenu de cette variable (timestamp unix, puisque c'est la soustraction de deux timestamps unix, donc le type de donnée ne change pas) en une date compréhensible pour le commun des mortels grâce à la fonction date().

    Maintenant, je peux pas tout faire à ta place. Il faut d'abord que tu changes le type de donnée stockée dans ta base et que tu utilises une colonne de type INT au lieu de je ne sais pas quoi exactement (VARCHAR ? CHAR ? TINYTEXT ? Autre ?).
    Tu remplis cette colonne avec des timestamps unix. Tu dois être sur un site de développement, pas un site en production, du moins je l'espère.
    Ensuite, tu appliques ce que je te dis. Je t'ai même déjà donné le code. Tout ce qu'il faut que tu fasses, c'est utiliser un timestamp unix dans ta base.
    On imagine rarement les ressources que l'on peut trouver ici

  7. #7
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    De retour parmis vous après 10 ans!!

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 149
    Points : 48
    Points
    48
    Par défaut
    il y a une erreur dans le lien http://php.developpez.com/faq/?page=dates#date_duree

    * Calcul du temps écoulés/passés en heures et minutes

    Calcul du temps en h:min

    $timestamp = abs($timestamp2 - $timestamp1);
    $diff_heure = floor(timestamp/3600); //Calcul des heures écoulées/restantes
    $timestamp = $timestamp - ($diff_heure*3600);
    $diff_min = $timestamp/60; //Calcul des minutes écoulées/restantes
    echo $diff_heure."h".$diff_min."min"; // Affiche 0h50min
    le '$' a été oublier pour 'timestamp' dans la phrase :
    $diff_heure = floor(timestamp/3600); //Calcul des heures écoulées/restantes


    Sinon j'ai presque réussi,reste des petits reglage pour l'affiche des minute qui utilise des x,xxxxxxxxxxx

Discussions similaires

  1. Soustraire une heure à une date
    Par SCOTTEDSTORM dans le forum Requêtes
    Réponses: 1
    Dernier message: 29/12/2014, 11h58
  2. comment comparer une date et une heure ?
    Par developpeur62 dans le forum Hibernate
    Réponses: 2
    Dernier message: 03/11/2006, 10h04
  3. [Date] Avoir une heure GMT
    Par hitech dans le forum Collection et Stream
    Réponses: 1
    Dernier message: 21/07/2006, 09h57
  4. Renseigner un TDateTime avec une date et une heure ?
    Par MaTHieU_ dans le forum Delphi
    Réponses: 2
    Dernier message: 10/07/2006, 01h50
  5. Recuperer une date et une heure.
    Par bygui dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 23/06/2006, 11h28

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