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 :

[Dates] Mettre en forme une date


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 152
    Par défaut [Dates] Mettre en forme une date
    Bonjour

    Je calcule le temps de connection sur le site, de chaque membre, sur le mois.

    Pour cela, je soustraits le timestamp de la page 2 au timestamp de la page 1, et j'insère la différence dans la base => La différence correspond donc à un chiffre qui est le nombre de secondes passées sur le site par le membre. A la fin du mois ces secondes sont converties en points.

    JE souhaite juste afficher dans l'espace membre, le nombre de jours/heures/min/sec auquels correspondent les secondes.

    Voici donc ce que j'ai fait:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?php
    $tpsecoule = "92500";
     
    $_SESSION['temps'] = $tpsecoule;
     
    $date =  date('d H:i:s', mktime(0, 0, $_SESSION['temps'], 0, 0));
    echo"<p> $date <p>"; //renvoie 01 01:41:40 
     
    ?>
    Pour ceux qui se demandent pourquoi je fais $_SESSION['temps'] = $tpsecoule; c'est parce que dans mktime, si je mets $tpsecoule cela ne marche pas...je sais pas pourquoi!

    Donc je souhaite maintenant "formater" le résultat contenu dans date pour que:

    01 01:41:40 soit affiché 1j 01:41:40 et que s'il n'y a pas de jours, cela affiche juste 01:41:40

    Quelles fonctions utiliser? Comment faire?

    MErci

  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
    Par défaut
    Tu ne peux pas faire comme ca.
    date() renvoit une date : "d" dans ta fonction, ce n'est pas le nombre de jours, c'est le jour du mois.

    Il faut comme a l'école, decouper tes secondes en minutes, en heures etc.

    J'ai trifouillé quelque chose pour ça :

    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
    function human_time($secondes) {
     
     
    	if ($secondes < 0 || IS_NULL($secondes) ) { $temps = "N/A"; }
    	else {
    		$total_minutes = floor ($secondes / 60);
    		$heures = floor ($total_minutes / 60);
    		$minutes = $total_minutes % 60;
    		$secondes = $secondes % 60;
     
     
    		if ($heures != 0) { $temps .= $heures . 'h '; }
    		if ($minutes != 0) { $temps .= $minutes . 'min '; }
    		$temps .= $secondes . 's ';
    		}
    	return $temps;
    }
    Tu peux t'en inspirer pour l'améliorer.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 152
    Par défaut
    Hello Sabotage

    En fait j'avais fais un code comme tu me soumets, mais je cherchais plus simple..

    En fait je comprends pas ce que tu reproche à mktime...

    En effet, j'ai fais plusieurs tests...si j'ai 185000 secondes, cela équivaut à 2 jours 3h 23min 20 sec écoulés...et c'est bien ce qui est retourné!

    Ceci rempli donc la fonction que je souhaite avoir, à savoir si un membre s'est connecté 10 sec dans le mois cela affichera

    Vous étiez connecté pour un total de "00:00:10" sur le site durant le mois.

    Si un autre était connecté 185000 secondes, cela retournera Vous étiez connecté pour un total de "2 jours 3h 23min 20 sec" sur le site durant le mois.

  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
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    En fait je comprends pas ce que tu reproche à mktime...
    mktime ne retourne pas une durée mais une date.
    si j'ai 185000 secondes, cela équivaut à 2 jours 3h 23min 20
    non, ca te donne le 2 janvier à 3:32:20

    La différence ? au dela de 31 jours, les dates et la durée ne se superposent plus.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    echo date('d H:i:s', mktime(0, 0, 185000, 0, 0));
    // 02 03:23:20
    echo date('d H:i:s', mktime(0, 0, 10635800, 0, 0));
    // 02 03:23:20 aussi
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 152
    Par défaut
    ok je comprends mieux

    Par contre, dans l'absolu cela ne pose pas problème car à la fin du mois, le compteur est remis à zéro.

    Donc cela ne dépassera jamais 16 jours de connection dans le mois pour les plus accro...

    Pense tu que dans ce cas de figure je dois tout de même garder ton code ou puis je utiliser celui ci?

    merci encore

Discussions similaires

  1. Mettre en forme une date
    Par francois78 dans le forum SQL
    Réponses: 17
    Dernier message: 22/12/2011, 14h19
  2. Réponses: 4
    Dernier message: 26/08/2008, 17h11
  3. Gérer l'ensemble des dates entre une date de début et une date de fin
    Par shaun_the_sheep dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 25/04/2008, 11h13
  4. Réponses: 7
    Dernier message: 22/11/2006, 09h14
  5. Réponses: 1
    Dernier message: 18/08/2006, 10h01

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