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

PHP & Base de données Discussion :

Afficher les tickets superieurs à 4 heures [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Janvier 2010
    Messages : 71
    Points : 32
    Points
    32
    Par défaut Afficher les tickets superieurs à 4 heures
    Bonjour,

    J'a besoin d'aide pour une requête MySQL dans un script PHP

    j'ai plusieurs tickets dans ma table MySQL, avec des delais de résolution SLA de 4heures et je voudrai récupérer tout les tickets inférieur à 4 heures

    La date de démarrage est dans un champ "START" est au format DATETIME "0000-00-00 00:00:00"

    Par exemple afficher 1 si elles sont supérieurs à 4H et 0 si elle sont inférieur à 4H

    Merci de votre aide, car je ne trouve pas la solution, et vous ête mon seul recourt.

    MAx

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    - Directement en mysql
    Le temps écoulé :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT UNIX_TIMESTAMP(CURDATE()) - UNIX_TIMESTAMP(`START`)

    La vérification de la durée écoulée
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT IF(UNIX_TIMESTAMP(CURDATE()) - UNIX_TIMESTAMP(`START`) <= 4 * 3600, 'OK', 'KO')

    - En PHP
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $date_debut = $row['START']; // la date donnée par la requête
    $objDatedebut = new DateTime($date);
    $objNow = new DateTime("now");
    $interval = date_diff($objDatedebut , $objNow );
    $delai = $interval->format('%h');
    if ($delai <= 4) {
      echo 'ok';
    }
    else {
      echo 'ko';
    }

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Janvier 2010
    Messages : 71
    Points : 32
    Points
    32
    Par défaut
    Merci sabotage, c'est exactement ça, j'ai pas trop compris le script php

    et j'ai oublié de préciser que la date de fin est dans un champ STOP...

    c'est a la place de now que je dois le mettre ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $objNow = new DateTime("now");
    et je comprend pas pourquoi on on met $date_debut car on l'appel pas non cette variable ?


    Max

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Si c'est une date définie, au lieu de la date actuelle ça donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT UNIX_TIMESTAMP(`STOP`) - UNIX_TIMESTAMP(`START`)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $objDatedebut = new DateTime($row['START']);
    $objDatefin = new DateTime($row['STOP']);
    //etc.
    Les 2 requêtes c'étaient des exemples selon que tu veuilles récupérer le temps entre les deux ou seulement le fait que les 4h soient dépassées ou non.
    Par contre, je ne sais pas si c'était clair, mais mes exemples c'est en sql OU en PHP, c'est deux façons différentes de faire.

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Janvier 2010
    Messages : 71
    Points : 32
    Points
    32
    Par défaut
    Merci Sabotage, ca marche mais il me reste un dernier soucis apparement!

    Il met Ok quand les heures de chaque champs a moins de 4h, mais il ne tient pas compte des jours passé, du coup jes des dates séparés de plusieur jour auquel il me met OK, parce que les heures sont espacé de mois de 4H et pas le mm jour..

    par exemple

    deb 2012-10-10 12:00:00 -> fin 2012-10-10 14:00:00 -> il affiche Ok
    deb 2012-10-09 12:00:00 -> fin 2012-10-10 14:00:00 -> il affiche Ok aussi

    alors qu'il y a 1 jour de plus, il devrait me mettre Ko ?

    Merci pour ton aide

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Saleté d'intervalles ... ça sera plus simple comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $objDatedebut = new DateTime($row('START']);
    $objDatefin = new DateTime($row('STOP']);
    if ($objDatedebut->modify('+4 hour') <= $objDatefin) {
      echo 'ok';
    }
    else {
      echo 'ko';
    }

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Janvier 2010
    Messages : 71
    Points : 32
    Points
    32
    Par défaut
    Merci Sabotage, ça marche beaucoup mieux

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Janvier 2010
    Messages : 71
    Points : 32
    Points
    32
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $objDatedebut = new DateTime($start); 
    $objDatefin = new DateTime($date);
     
    if ($objDatedebut->modify('+4 hour') <= $objDatefin) {
     
      echo '<font color=red>Ko</font>';
    }
    else { 
      echo '<font color=green>Ok</font>';
    }
    Bonjour, j'ai encore besoin d'aide, je ne comprend pas j'ai migré le serveur vers un nouveau, et le script ne fonctionne plus, j'ai beau chercher d'ou vient le problème mais j'avoue que je ne trouve vraiment pas, avez vous une idée ?

    j'ai installé la version php-5.3.3-22.el6.x86_64 de php, cela pourrait venir de là je pense non ?

    merci pour votre aide

    MAx

  9. #9
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    PHP 5.3 est suffisant comme version.

    Debug un peu :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    var_dump($start);
    echo '<br/>';
    var_dump($date);
    $objDatedebut = new DateTime($start); 
    $objDatefin = new DateTime($date);

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Janvier 2010
    Messages : 71
    Points : 32
    Points
    32
    Par défaut
    Bonjour

    Merci sabotage, désolé j'etais en vacance voila le retour de résultat :

    string(19) "2013-05-22 11:43:58"
    string(10) "2013-05-29"

    j'ai l’impression qu'il manque les heures et minutes non ?

    Cordialement

    MAx

  11. #11
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    D'ou vient $date ?

  12. #12
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Janvier 2010
    Messages : 71
    Points : 32
    Points
    32
    Par défaut
    Le $date est pour afficher la date et heure actuelle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?php
     
    $date = date("Y-m-d");
    $heure = date("H:i:s");
     
    Print("Nous sommes le ");
    $datefr = date_create($date);;
    echo date_format($datefr,'d/m/Y');
    print (" et il est $heure ");
    ?>
    j'ai mis ça dans mon headers pour afficher la date du jour ! tu crois que le problème vient de là ?

  13. #13
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Si tu veux que ta date de fin soit "maintenant" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $objDatefin = new DateTime();

  14. #14
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Janvier 2010
    Messages : 71
    Points : 32
    Points
    32
    Par défaut
    j'ai ajouté comme ceci, mais ca marche tjrs pas ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    $objDatedebut = new DateTime($start); 
    $objDatefin = new DateTime();
     
    if ($objDatedebut->modify('+4 hour') <= $objDatefin ) {
     
      echo '<font color=red>Ko</font>';
    }
    else { 
      echo '<font color=green>Ok</font>';
    }
    j'ai fais un debug
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    string(19) "2013-05-22 11:43:58"
    NULL

  15. #15
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Janvier 2010
    Messages : 71
    Points : 32
    Points
    32
    Par défaut
    j'ai réglé le problème, j'ai mis un timezone en UTC dans le php.ini

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

Discussions similaires

  1. php afficher les heures avec minutes qui reste..
    Par xunil2003 dans le forum Langage
    Réponses: 1
    Dernier message: 21/07/2012, 22h51
  2. Afficher les milièmes dans un champs Date Heure
    Par zooffy dans le forum ASP.NET
    Réponses: 8
    Dernier message: 27/07/2007, 15h51
  3. Comment afficher les accent sous mysql v4.0.13
    Par buildozer dans le forum Requêtes
    Réponses: 2
    Dernier message: 17/06/2003, 10h33
  4. Afficher les bonnes facettes
    Par WormsHL-Groove dans le forum OpenGL
    Réponses: 3
    Dernier message: 26/08/2002, 22h36

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