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 :

Soustraction de temps au millième de seconde


Sujet :

Langage PHP

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 5
    Points : 1
    Points
    1
    Par défaut Soustraction de temps au millième de seconde
    Bonjour a tous,

    Voici mon problème:

    J'ai deux valeurs temps dans une base de donnée SQLITE que je souhaiterais soustraire entre elles.

    Ex:
    $temps1=01:04.325
    $temps2=01:04.830

    $diff=$temps2-$temps

    $diff=0.505

    J'ai essayé TIMEDIFF, strftime mais je n'arrive à rien ou je ne sais pas correctement les utiliser.

    * Autre question, comment cela se passe si le résultat est négatif? (cad temps2<temps1). Je risque de me retrouver de temps en temps dans ce cas de figure.

    Merci par avance à ceux qui pourront m'aider

  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

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Merci pour ton lien.

    Visiblement je n'arrive pas à utiliser la fonction strftime. Je n'obtiens aucun résultat.
    Pourrais-tu me dire où j'ai fait une erreur?

    Voici mon code simplifé:

    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    <?php
     
    // INFORMATIONS A SAISIR
    $url = 'http://www.vola-racing.com/circuitpro/circuitalainprost/update.php?dir=circuitpro:circuitalainprost&index=0';
    $data = utf8_decode(substr(file_get_contents($url), 8, -1));
     
    $numero = '25';
     
    // BASE DE DONNEE SQLITE
    $doc = new DOMDocument();
    $doc->loadHTML($data);
     
    $xpath = new DOMXPath($doc);
     
    try
    {
        $dbh = new PDO("sqlite::memory:");
        $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    }
    catch(PDOException $e)
    {
        exit($e->getMessage());
    }
     
    $dbh->query("CREATE TABLE race (clt INTEGER, num INTEGER, driver, lastlap TIME, interval TIME, lap INTEGER, blank)");
    $stmt = $dbh->prepare("INSERT INTO race VALUES (?, ?, ?, ?, ?, ?, ?)");
     
    foreach($xpath->query('//tr') as $line)
    {
        $values = array();
     
        foreach ($xpath->query('td', $line) as $child)
        {        
            $values[] = $child->nodeValue;
        }
     
        $stmt->execute($values);
    }
     
    $query  = $dbh->query("SELECT * FROM `race` WHERE `num`='$numero' LIMIT 1");
    $driver = $query->fetchObject();
     
    // Notre pilote
    $suivant = $driver->clt - 1;
    $precedent = $driver->clt + 1;
     
    // Pilote précédent
    $query  = $dbh->query("SELECT * FROM `race` WHERE `clt`='$precedent' LIMIT 1");
    $driverprecedent = $query->fetchObject();
     
    // Pilote suivant
    $query  = $dbh->query("SELECT * FROM `race` WHERE `clt`='$suivant' LIMIT 1");
    $driversuivant = $query->fetchObject();
     
    echo "dernier chrono notre pilote: ", $driver->lastlap, "<br>";
    echo "dernier chrono pilote precedent: ",$driverprecedent->lastlap;
    echo '<br>';
     
     
    //Calcul de l'écart de chrono entre notre pilote et le pilote precedent/suivant
    $diff= "SELECT strftime('%f','$driver->lastlap') - strftime('%f','$driverprecedent->lastlap')";
     
    echo "difference de temps entre notre pilote et pilote precedent: ", $diff;
     
    ?>

  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
    $diff est ta chaine de caractère.
    il manque l'execution et la lecture du résultat.

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Malheureusement je n'y arrive pas. Pourtant je cherche.

    J'ai essayé ça mais aucun résultat.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $diff->queryExec ("SELECT strftime('%S.%f','$driver->lastlap') - strftime('%S.%f','$driverprecedent->lastlap')");
    return $diff;
    Pourrais-tu m'aider avec un code fonctionnel?

  6. #6
    Expert éminent
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Temps réel Embarqué

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 146
    Points : 9 387
    Points
    9 387
    Par défaut
    queryExec(), aurais-tu inventé une nouvelle fonction ?
    La fonction est PDO::query(string) et elle te renvoie un objet PDOStatement.
    Que tu peux parcourir avec PDOStatement::fetch() ou bien directement avec une boucle foreach().

  7. #7
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $diff = $dbh->query("SELECT strftime('%s','$driverprecedent->lastlap') - strftime('%s','$driver->lastlap')")->fetch();
    echo $diff;
    Cela ne marche toujours pas. J'ai juste un résultat: Array

    Qu'est-ce qui ne va pas/ manque?

    Merci d'aider un pauvre débutant...

  8. #8
    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

  9. #9
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Malheureusement cela ne fonctionne pas. Je n'ai plus de résultat du tout.

    Voici mon code complet si par hasard tu peux jeter un coup d'oeil

    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    <?php
     
    // INFORMATIONS A SAISIR
    $url = 'http://www.vola-racing.com/circuitpro/circuitalainprost/update.php?dir=circuitpro:circuitalainprost&index=0';
    $data = utf8_decode(substr(file_get_contents($url), 8, -1));
     
    $numero = '25';
     
    // BASE DE DONNEE SQLITE
    $doc = new DOMDocument();
    $doc->loadHTML($data);
     
    $xpath = new DOMXPath($doc);
     
    try
    {
        $dbh = new PDO("sqlite::memory:");
        $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    }
    catch(PDOException $e)
    {
        exit($e->getMessage());
    }
     
    $dbh->query("CREATE TABLE race (clt INTEGER, num INTEGER, driver, lastlap TIME, interval TIME, lap INTEGER, blank)");
    $stmt = $dbh->prepare("INSERT INTO race VALUES (?, ?, ?, ?, ?, ?, ?)");
     
    foreach($xpath->query('//tr') as $line)
    {
        $values = array();
     
        foreach ($xpath->query('td', $line) as $child)
        {        
            $values[] = $child->nodeValue;
        }
     
        $stmt->execute($values);
    }
     
    $query  = $dbh->query("SELECT * FROM `race` WHERE `num`='$numero' LIMIT 1");
    $driver = $query->fetchObject();
     
    // Notre pilote
    $suivant = $driver->clt - 1;
    $precedent = $driver->clt + 1;
     
    // Pilote précédent
    $query  = $dbh->query("SELECT * FROM `race` WHERE `clt`='$precedent' LIMIT 1");
    $driverprecedent = $query->fetchObject();
     
    // Pilote suivant
    $query  = $dbh->query("SELECT * FROM `race` WHERE `clt`='$suivant' LIMIT 1");
    $driversuivant = $query->fetchObject();
     
    echo "dernier chrono notre pilote: ", $driver->lastlap, "<br>";
    echo "dernier chrono pilote precedent: ",$driverprecedent->lastlap;
    echo '<br>';
     
     
    //Calcul de l'écart de chrono entre notre pilote et le pilote precedent/suivant
     
    $diff = $dbh->query("SELECT strftime('%s','$driverprecedent->lastlap') - strftime('%s','$driver->lastlap')")->fetch();
    echo $diff[0];
     
    ?>

  10. #10
    Expert éminent
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Temps réel Embarqué

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 146
    Points : 9 387
    Points
    9 387
    Par défaut
    Que donne :

Discussions similaires

  1. [JavaScript] combien de boucles en un millième de seconde? ^_^
    Par javatwister dans le forum Contribuez
    Réponses: 4
    Dernier message: 09/07/2010, 01h29
  2. UPDATE et soustraction de temps
    Par cadoudal56 dans le forum Requêtes
    Réponses: 2
    Dernier message: 29/10/2009, 18h09
  3. [VBA]comment faire un temps arret de quelques secondes
    Par megapacman dans le forum Général VBA
    Réponses: 3
    Dernier message: 16/05/2008, 11h54
  4. [langage] temps au centieme de seconde
    Par sommerset dans le forum Langage
    Réponses: 2
    Dernier message: 22/02/2005, 11h08
  5. Réponses: 2
    Dernier message: 25/05/2004, 15h33

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