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 :

différence entre deux dates [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2009
    Messages : 40
    Par défaut différence entre deux dates
    Bonjour,

    Dans ma base de donnée j'enregistre une date que je veux réutiliser a un autre moment dans mon site.
    Pour faire plus "joli", je veux qu'à la place d'afficher la date et l'heure, on m'indique la différence avec maintenant.

    Pour récupérer la différence, j'utilise la fonction SQL TIMEDIFF
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    	$req = $db->prepare("SELECT TIMEDIFF(NOW(), date_mod) as date_ago
    				FROM f_version
    				WHERE file = ?
    				ORDER BY num DESC");
    	$req->execute(array($id_file));

    Ce qui me donne une réponse sous l format heures:minutes:secondes

    Avec des substr() j'arrive à extraire les chiffres que je veux mais j'ai un problème si la différence de plus de 100h (ce qui risque d'arriver)

    Dans ma fonction, je m'amuse à toujours faire des comparaisons du style
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    	if ($date <= '00:01:00') {
    		return "a few secondes ago";
    	}
    	elseif ($date < '01:00:00') {
    		return intval(substr($date,3,2))." minutes ago";
    	}
    	elseif ($date < '02:00:00') {
    		return "one hour ago";
    	}
    	elseif ($date < '24:00:00') {
    		return intval(substr($date,0,2))." hours ago";
    	}
    Mais le problème est si j'ai plus de 100h, par exemple 125:00:00 est plus petit que 24:00:00 et donc j'obtiendrai "12 hours ago"

    Est-ce qu'il n'existe pas un moyen de manipuler les dates plus facilement (en sql ou php) qu'en devant chipoter ainsi avec la chaine de caractères ?

    merci

  2. #2
    Membre confirmé Avatar de Chen norris
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2004
    Messages
    216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 216
    Par défaut
    Ta requête ne retournerait-elle pas plutôt un timestamp (qui s'affiche effectivement sous le format hh:mm:ss quand tu le considères comme une chaine de caractères) ? Si tel est le cas, je pense qu'une simple soustraction en PHP te permettra de faire tes calculs, et ensuite pour l'affichage, si tu souhaites le remettre sous une forme plus sympa :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    echo date("d-m-Y G:i:s", $date);
    Si ce n'est pas le cas, essaye de te pencher vers une conversion chaine de caractère -> timestamp, tu n'auras plus besoin de te casser la tête avec des cas particuliers.

  3. #3
    Membre Expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Par défaut
    Bonjour,

    Pour comparer des dates tu peux utiliser la fonction http://fr.php.net/date_diff

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2009
    Messages : 40
    Par défaut
    Chen norris : oui je crois que c'est bien un timestamp (cf la doc).
    Le problème c'est que php commence à compter à partir du 1er janvier 1970, donc si je lui donne un timestamp d'un jour, il va me le convertir en 2/1/70...

    ThomasR : je veux bien mais en quoi calculer la différence en php plutot qu'en sql m'aidera. De toute façon je devrai le reconvertir sous le format de php

  5. #5
    Membre Expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Par défaut
    Citation Envoyé par andtwoturtles Voir le message
    ThomasR : je veux bien mais en quoi calculer la différence en php plutot qu'en sql m'aidera. De toute façon je devrai le reconvertir sous le format de php
    Parce que toi tu compares des chaines de caractères en PHP, et non des dates, d'où le fait que 100 est inférieur à 99 (tri alphabétique).

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2009
    Messages : 40
    Par défaut
    ok je pense que j'ai trouvé
    la fonction qu'il me fallait était UNIX_TIMESTAMP pour convertir un temps sql en temps php

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    	$req = $db->prepare("SELECT UNIX_TIMESTAMP(date_mod) as d_before, UNIX_TIMESTAMP(NOW()) as d_now FROM f_version
    				WHERE file = ?
    				ORDER BY num DESC");
    	$req->execute(array($id_file));
     
    	$result = $req->fetch();
    	$diff =  ($result['d_now'] - $result['d_before']);
     
    	echo $result['d_before'].'<br/>';
    	echo $result['d_now'].'<br/>';
    	echo $diff.' sec <br/>';
    	echo intval($diff/(60)).' min <br/>';
    	echo intval($diff/(60*60)).' h <br/>';
    	echo intval($diff/(60*60*24)).' jour <br/>';

    merci

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 21/07/2006, 14h04
  2. Nombre de minutes de différence entre deux dates
    Par Oberown dans le forum SQL Procédural
    Réponses: 4
    Dernier message: 05/05/2006, 15h41
  3. Différence entre deux dates
    Par Azharis dans le forum Access
    Réponses: 3
    Dernier message: 11/01/2006, 10h58
  4. Différence entre deux dates
    Par pittzz dans le forum Oracle
    Réponses: 5
    Dernier message: 18/07/2005, 12h24
  5. Comment obtenir la différence entre deux dates ?
    Par jbat dans le forum Langage
    Réponses: 4
    Dernier message: 02/06/2005, 09h34

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