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 :

[Système] Rajout fonction heure


Sujet :

Langage PHP

  1. #1
    Membre éclairé Avatar de fallais
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Juillet 2006
    Messages : 858
    Points : 783
    Points
    783
    Par défaut [Système] Rajout fonction heure
    Bonjour voila la fonction :

    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
    function format_h($duree){
    $min = $duree%60;
    $heures = ($duree-$min)/60;
     
    if($heures > 0) $heures = $heures;
    if($min == 0){
    $duree = $heures.'h ';
    }
    else if($heures == 0){
    if($min > 0) $min = $min;
    $duree = $min.'min';
    }
    else{
    if($min < 0) $min *= -1;
    $duree = $heures.'h'.$min.'min';
    }
    return $duree;
    }
    Elle transforme une variable (en minutes) en format XXmin ou XXhXXmin

    J'aimerai y rajouter une fonction pour faire un format du type XXmin ou XXhXXmin ou XXjXXhXXmin

    Merci

  2. #2
    Membre confirmé Avatar de papyphp
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    438
    Détails du profil
    Informations personnelles :
    Âge : 74
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 438
    Points : 587
    Points
    587
    Par défaut
    Bonjour,

    Tu as déje l'algo qui transforme en heures minutes. Il suffit de s'en inspirer pour trouver les jours.

    Pour mon info personnelle que fait cette ligne ?

    Citation Envoyé par Elwyn
    if($heures > 0) $heures = $heures;

  3. #3
    Membre expérimenté
    Avatar de guitou12
    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 077
    Points : 1 561
    Points
    1 561
    Par défaut
    Je crois que c'est pour faire joli en fait

  4. #4
    Membre éclairé Avatar de fallais
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Juillet 2006
    Messages : 858
    Points : 783
    Points
    783
    Par défaut
    Citation Envoyé par guitou12
    Je crois que c'est pour faire joli en fait
    Oui lol, personne ne peut m'aider ? Je galere a "voir" le "truc"

  5. #5
    Membre confirmé Avatar de papyphp
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    438
    Détails du profil
    Informations personnelles :
    Âge : 74
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 438
    Points : 587
    Points
    587
    Par défaut
    En fait on se pose la question suivante : est-ce toi qui a écrit ce script?

    Si non : il n'y a pas de mal mais la première chose à faire est d'essayer de comprendre ce qu'il fait.
    or la ligne dont je te parlais ne fait rien : si $heure est positif alors affecter à $heure la valeur $heure c'est à dire ne rien faire.

    Maintenant pour ton problème, tu suis ce qui est fait pour transformer un nombre de minutes en heures et tu t'en inspire pour transformer un nombre d'heures en jours (sachant qu'un jour compte 24 heures)
    DANGER : Il restera un 'petit' problème concernant les heures d'été et d'hiver, dans un cas un jour comptera 23 heures et dans l'autre 25.

  6. #6
    Membre éclairé Avatar de fallais
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Juillet 2006
    Messages : 858
    Points : 783
    Points
    783
    Par défaut
    Je n'ai pas ecris ce script
    Mais je l'ai compris evidemment, et oui la ligne ne sert a rien mais si je la vire le resultat n'est pas le meme
    Donc voila je vais essayer

  7. #7
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 249
    Points : 1 565
    Points
    1 565
    Par défaut
    Tiens, voici un autre code qui fait la meme chose... mais sans tout ces calculs ;o)

    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
    function format_h($duree){
     
        $anneeBase = date("Y");
        $time = mktime(0,$duree, 0,1,1,$anneeBase);
     
        list($annee, $jour, $heure, $mn) = explode('/', date("Y/z/G/i", $time));
     
        $jour+=365*($annee - $anneeBase);
        $mn+=0;
     
        $resultat = '';
        if ($jour > 0) {
            $resultat.=$jour.'j';
        }
        if ($heure > 0) {
            $resultat.=$heure.'h';
        }
        if ($mn > 0) {
            $resultat.=$mn.'mn';
        }
     
        return $resultat;
    }
     
    //$liste = range(60*24*364,60*24*367);
    $liste = range(0,3000);
     
    foreach($liste as $value) {
        echo "$value => ".format_h($value).'<br/>';
    }
    Les puristes diront que oui mais les années bissextiles... bah, je suppose que la methode ne sera pas utilisée pour calculer des durées égales a plusieurs années... et puis la précédente methode ne le gérait pas non plus.

    Quand aux durées négatives, ce n'est pas géré, il suffit de verifier que la durée est négative avant, la rendre positive, et rajouter un "-" a la fin si necessaire.

    J'ai pris l'année courante comme référence, mais on peut bien sur en choisir une au hasard... tant qu'elle est superieure a 1970 ;o)

    En principe je livre pas de code tout fait mais... c'est le pouvoir des chibi eyes ;o)

  8. #8
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 860
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 860
    Points : 3 444
    Points
    3 444
    Par défaut
    Salut

    Pour modifier ton script, je pense qu'il faut s'inspirer du même système pour trouver les heures, en divisant si possible le nombre de minutes par 3600 pour trouver le nombre de jours.

    Donc tu fais en 3 étapes :

    Trouver le nombre de jours. Stocker ce nombre, et enlever le nombre de minutes correspondantes ( 3600 minutes pour un jour )
    Trouver le nombre d'heures. Stocker ce nombre, et enlever le nombre de minutes correspondantes ( 60 minutes par heure )
    Normalement il ne te reste que des minutes. Stocker ce nombre. Puis afficher le résultat

    A+

  9. #9
    Membre éclairé Avatar de fallais
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Juillet 2006
    Messages : 858
    Points : 783
    Points
    783
    Par défaut
    Je suis arrivé a ca :

    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
    33
    <?
    $duree = "3661";
    function format_h($duree){
     
    $jours = ceil($duree%3600);
    $heures = ceil(($duree-($jours*3600))%60);
    $minutes = ceil($duree-($jours*3600)-($heures*60));
     
    if($jours <= 0) {
    $jour="";
    }
    else{
    $jour=$jour."j";
    }
     
    if($heure <= 0) {
    $heure="";
    }
    else{
    $heures=$heures."h";
    }
     
    if($minutes <= 0) {
    $minutes="";
    }
    else{
    $minutes=$minutes."min";
    }
     
    }
     
    echo $jours.''.$heures.''.$minutes;
    ?>
    Mais ca ne marche pas

  10. #10
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 860
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 860
    Points : 3 444
    Points
    3 444
    Par défaut
    Salut,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $jours = ceil($duree%3600);
    Je ne comprend pas bien pourquoi tu calcules comme ça.

    Si tu as disons 10000 minutes, il faut juste diviser par 3600 pour obtenir le nombre de jours, ceci dans la partie "entière".

    Math.floor(10000/3600) = 2 (jours)
    1000%3600 = le nombre de minutes restants, après avoir enlevé les 2 jours

    A+

  11. #11
    Membre éclairé Avatar de fallais
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Juillet 2006
    Messages : 858
    Points : 783
    Points
    783
    Par défaut
    Ca y est !!!

    J'ai reussi !!

    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
    function format_h($duree){
     
    $jours = floor($duree/1440);
    $new_duree = $duree-($jours*1440);
    $heures = floor($new_duree/60);
    $new_new_duree = $new_duree-($heures*60);
    $minutes = floor($new_new_duree);
     
    if($jours <= 0){
    $jours="";
    }
    else{
    $jours = $jours.'j';
    }
     
    if($heures <= 0){
    $heures="";
    }
    else{
    $heures = $heures.'h';
    }
     
    if($minutes <= 0){
    $minutes="";
    }
    else{
    $minutes = $minutes.'min';
    }
     
    echo ''.$jours.' '.$heures.' '.$minutes.'';
     
    }
    Il fonctionne apparament !
    Merci pour ton aide (pour la fonction floor)

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 10/08/2006, 20h04
  2. [Système] problème fonction header
    Par Pfeffer dans le forum Langage
    Réponses: 1
    Dernier message: 21/06/2006, 11h16
  3. [Système] [debutant] Fonction include
    Par pierre50 dans le forum Langage
    Réponses: 7
    Dernier message: 01/06/2006, 19h00
  4. [Système] Pb fonction explode
    Par clairette dans le forum Langage
    Réponses: 3
    Dernier message: 17/05/2006, 15h40
  5. Rajouter x heures a une date
    Par jiluc dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 21/03/2006, 18h07

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