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 :

Erreurs calculs avec mktime


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 171
    Points : 52
    Points
    52
    Par défaut Erreurs calculs avec mktime
    Bonjour,

    Je pensais avoir résolu mes problèmes avec le format mktime cependant j'ai quelques erreurs de calculs avec celui ci.

    Je doit multiplier un coefficient par une duree
    J'ai différents coefficients, 0.5, 0.7, 1, 2 etc ... et selon le coefficient le mktime n'en fait qu'a sa tete. Avec 0.5 les multiplications sont correctes cependant avec 0.7 par exemple j'obtient des résultats comme 50h au lieu de 1h et des brouettes ou d'autres durée invraisemblable.

    Je voudrais savoir si vous voyez une quelconque erreur dans mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
    <?php
     
    // CALCULS HEURES POUR LA PAGE RESA_BDD.PHP
     
    // on definit la variable heure 
    $heure = mktime($_POST['heure_duree'],$_POST['minute_duree']);
    $duree_reelle = date("h:i",$heure);
     
    $heur = mktime($heure_duree,$minute_duree);
    $duree2 = date("h:i",$heur);
     
    $heure_debut = mktime($heure1,$minute1);
    $heure_debut2 = date("h:i",$heure_debut);
     
     
    $heure_fin = $heure1+$heure_duree;
    if ($heure_fin<10) {
     $heure_fin= '0' . $heure_fin;
    }
    $heure_fin1 = $minute1+$minute_duree;
    if ($heure_fin1<10) {
     $heure_fin1= '0' . $heure_fin1;
    }
    $heure_fin2 = $heure_fin . ':' . $heure_fin1;
     
    // on multiplie par le coefficient
     
    $heureee = mktime(0,$_POST['heure_duree'],$_POST['minute_duree']);
    $heureee*=$coeff3['valeur_coeff'];
    $heure_compta = date("i:s",$heureee);
    ?>

  2. #2
    En attente de confirmation mail Avatar de gd_dev
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2003
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2003
    Messages : 79
    Points : 129
    Points
    129
    Par défaut L'erreur est dans mktime
    Bonjour,

    L'erreur est le zéro
    $heureee = mktime(0,$_POST['heure_duree'],$_POST['minute_duree']);
    $heureee*=$coeff3['valeur_coeff'];
    $heure_compta = date("i:s",$heureee);

    Il faut faire
    $heureee = mktime($_POST['heure_duree'],$_POST['minute_duree']);
    $heureee*=$coeff3['valeur_coeff'];
    $heure_compta = date("i:s",$heureee);

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 171
    Points : 52
    Points
    52
    Par défaut
    J'ai toujours pleins d'erreurs, il n'y a pas autre chose ? :s

  4. #4
    En attente de confirmation mail Avatar de gd_dev
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2003
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2003
    Messages : 79
    Points : 129
    Points
    129
    Par défaut Peut être
    Bonjour,

    Peut être au lieu de
    $heure_compta = date("i:s",$heureee);

    Essayé:
    $heure_compta = date("h:i",$heureee);

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 171
    Points : 52
    Points
    52
    Par défaut
    J'ai refait des echo de tous mes calculs pour l'heure comptabilisé et voila que je me rend compte que tout redéconne encore :

    Quelqu'un peut il m'expliqué clairement d'ou viens l'erreur ? :'(

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    <?
    // Calcul heure compta !
     
    echo $_POST['heure_duree'] . ' = heure_duree <br>';
    echo $_POST['minute_duree'] . ' = minute_duree <br>';
     
    $heure1 = mktime($_POST['heure_duree'],$_POST['minute_duree']);
     
    echo $heure1 . ' = heure1<br>';
     
    $heure2= $heure1 * $coeff3['valeur_coeff'];
     
    echo $heure1 . ' * ' . $coeff3['valeur_coeff'] . ' = Calcul heure2 <br>';
    echo $heure2 . ' = heure2<br>';
     
    $heure_compta = date("H:i",$heure2);
     
    echo 'date("H:i",' . $heure2 . ') = Calcul heure_compta <br>';
    echo $heure_compta . ' = heure_compta<br>';
     
    ?>
    Voila ce que ca m'affiche :


  6. #6
    Membre confirmé Avatar de stunti
    Inscrit en
    Mai 2006
    Messages
    520
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Mai 2006
    Messages : 520
    Points : 594
    Points
    594
    Par défaut
    A mon avis il faut que tu mette le dernier parametre de mktime a true pour qu'il prenne en compte l'heure d'ete et d'hiver.
    Mais j'ai du mal a comprendre l'interet de travaille sur des timestamps incluant le jour alors que tu n'as besoin que de travailler sur des heures.

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 171
    Points : 52
    Points
    52
    Par défaut
    Citation Envoyé par stunti
    A mon avis il faut que tu mette le dernier parametre de mktime a true pour qu'il prenne en compte l'heure d'ete et d'hiver.
    Je ne connais pas tres bien toutes les possibilités de mktime, cela m'est vraiment utile si je veux avoir un résultat correct ? Si oui, comment dois-je faire ?


    Mais j'ai du mal a comprendre l'interet de travaille sur des timestamps incluant le jour alors que tu n'as besoin que de travailler sur des heures.
    Je ne vois pas ou est-ce que j'inclue le jour dans mon timestamp, c'est peut-etre de la que viens mon erreur, de quel endroit veut tu parler exactement ?

  8. #8
    En attente de confirmation mail Avatar de gd_dev
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2003
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2003
    Messages : 79
    Points : 129
    Points
    129
    Par défaut Ok, Ok
    mktime cacule le temp depuis une année témon (je crois que c'est 1970)

    donc le résultat retourné par la fonction est le nombre de miliseconde écoulées depuis cette date témoin.

    vous devez donc diviser la différence.

    $heure1 = mktime($_POST['heure_duree'],$_POST['minute_duree']);
    $base = mktime(0, 0);


    $heure2 = ($heure1 - $base) * $coeff3['valeur_coeff'] + $heure1;

  9. #9
    Membre confirmé Avatar de stunti
    Inscrit en
    Mai 2006
    Messages
    520
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Mai 2006
    Messages : 520
    Points : 594
    Points
    594
    Par défaut
    justement.
    mktime inclue le jour pour toi si tu ne lui dit pas explicitement.

    Je travaillerai plutot avec une variable simple et en minute.
    tu multiplies par 60 les heures et tu ajoutes tes minutes.
    ensuite tu fait l'inverse une fois que tu as multiplier par ton coeff.
    (division et modulo)

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 171
    Points : 52
    Points
    52
    Par défaut
    gd_dev ta méthode me renvoie 5h15 au lieu de 1h45. :s

    Stunti : j'avais commencé par faire ca, mais par simplicité j'ai basculé sur la méthode mktime sinon ca m'entrainais encore plus de complications ... donc j'aimerais continuer avec le mktime, ca serait plus simple... enfin si j'y arrive un jour !

  11. #11
    En attente de confirmation mail Avatar de gd_dev
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2003
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2003
    Messages : 79
    Points : 129
    Points
    129
    Par défaut Petite erreur :-)
    $heure2 = ($heure1 - $base) * $coeff3['valeur_coeff'] + $base;

    Remarque:
    Je vous conseil également la méthode de Stunti car avec mktim vous pourrier rencontré des problèmes si $coeff3['valeur_coeff'] * ($heure1 - $base) est supérieur à 24h00

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 171
    Points : 52
    Points
    52
    Par défaut
    Il n'y a pas de risque que cela depasse 24h !

    Merci beaucoup en tout cas ca marche ! Vraiment merci, c'est un grand soulagement.

    Reste plus qu'a résoudre mes 2 autres gros problèmes php mais ce n'est pas avec mktime ! ^^

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Dates] Erreur de calcul avec la fonction mktime ?
    Par Xpertfly dans le forum Langage
    Réponses: 1
    Dernier message: 18/11/2008, 11h40
  2. calcul avec mktime
    Par shkyo dans le forum Langage
    Réponses: 7
    Dernier message: 14/11/2008, 15h43
  3. Erreur de calcul avec la fonction log
    Par xav181 dans le forum C++
    Réponses: 8
    Dernier message: 07/04/2008, 15h08
  4. erreur de calcul avec SUM
    Par peyro51 dans le forum Excel
    Réponses: 6
    Dernier message: 14/07/2007, 09h14
  5. [Dates] Erreur avec mktime
    Par Sandara dans le forum Langage
    Réponses: 7
    Dernier message: 21/06/2006, 16h14

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