Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2641 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Help me : problème de date/heure du moment en php

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Help me : problème de date/heure du moment en php

n°1840061
simsidius
Posté le 19-01-2009 à 16:19:07  profilanswer
 

Voici un code php permettant d'afficher un top 10 des actifs des membres de mon forum par ordre décroissant proportionnellement a leur inscription (taux en msg/jour)
Juste un souci, la syntaxe pour déclaré "au moment ou on lit la stat" n'est pas précise puisque c'est "aujourd'hui" tout court c'est a dire aujourd'hui a minuit donc cela faut les résultat puisque (je prend un exemple simple pour que vous puissiez comprendre) :
 
Un membre qui s'inscrit le 15/01/2009 a 22H et a 2 messages
Si on regard les statistiques le 16/01/2009 a 22H logiquement il devrai être a 2 msg/j de moyenne or il indiquera 24 msg/jour de moyenne du fait que la statistique considère que la date au moment ou on lira la stat n'est pas le 16/01/2009 a 22h mais le 16/01/2009 a minuit (le matin)
 
Donc cela change tout puisque entre 22h et minuit ça fait un écart de 2h donc 1 msg par heure en moyenne soit 24 msg par jour de moyenne alors qu'en réalité quand on regarde la stat c'est 2 msg/jour de moyenne.
 
Autre souci a cause de la déclaration de "maintenant" : si un membre s'inscrit après minuit, il est a 0 msg/heure si on regarde la stat le même jour et cela quelque soit le nombre de message qu'il postera (normale puisque ça s'arrète minuit)
 
Malgré avoir essayé pleins de choses y compris en regardant cet aide : http://www.toutestfacile.[...].com-functdate.php5
impossible d'arriver a déclarer l'instant présent.
 
Voici le code de la mod':
 

Code :
  1. <?php
  2. //Choix de la période (jour, semaine, mois)
  3. $periode = "jour";
  4. switch($periode) {
  5. case "jour" :
  6. $interval = 86400;
  7. break;
  8. case "semaine" :
  9. $interval = 86400 * 7;
  10. break;
  11. case "mois" :
  12. $interval = 86400 * 30;
  13. break;
  14. default :
  15. $interval = 86400;
  16. $periode = "jour";
  17. }
  18. $sql = "SELECT u.id,u.username,
  19. ROUND((u.num_posts/((Unix_Timestamp(CURRENT_DATE()
  20. ) - u.registered)/".$interval." )),6) AS Moyenne FROM ".$db->prefix."users AS u ORDER BY Moyenne DESC LIMIT 10";
  21. $result = $db->query($sql)or error ('Erreur récupération Moyenne des posts', __FILE__, __LINE__, $db->error());
  22. echo "<p><strong>Top 10 posteurs</strong><small><i> (Moyenne par ".$periode." )</i></small>&nbsp;:&nbsp;";
  23. while($top10_membre = $db->fetch_assoc($result)) echo '<a href="profile.php?id='. $top10_membre['id'] .'">'. $top10_membre['username'] .'</a> (<i>'. $top10_membre['Moyenne'] .'</i> ), ';
  24. ?>


 
Par quoi dois je remplaçer  ((Unix_Timestamp(CURRENT_DATE()
) svp ?


Message édité par simsidius le 19-01-2009 à 16:20:32

---------------
Webmasteur & administrateur du nouveau site d'info : informatique-fr.org
mood
Publicité
Posté le 19-01-2009 à 16:19:07  profilanswer
 

n°1840958
NewsletTux
&lt;Insérez ici votre vie /&gt;
Posté le 21-01-2009 à 10:04:05  profilanswer
 

Hi,
si tu le remplaçais par un PHP qui te crée l'heure à la mano ?
du style

Code :
  1. $thisdate = mktime(0, 0, 0, date("n" ), date("j" ), date("Y" )) // respectivement heure, minute, seconde, mois, jour année


 
donc ta requête deviendrait :

Code :
  1. $sql = "SELECT u.id,u.username,
  2. ROUND((u.num_posts/((".$thisdate." ) - u.registered)/".$interval." )),6) AS Moyenne FROM ".$db->prefix."users AS u ORDER BY Moyenne DESC LIMIT 10";


 
 
 
EDIT : balises code.
 
EDIT 2 :
plus d'infos :
 
fonction date = http://fr.php.net/manual/fr/function.date.php
fonction mktime = http://fr.php.net/manual/fr/function.mktime.php


Message édité par NewsletTux le 21-01-2009 à 10:06:35

---------------
NewsletTux - outil de mailing list en PHP MySQL
n°1841200
Profil sup​primé
Posté le 21-01-2009 à 15:42:06  answer
 

c'est peut-être bourrin comme solution mais moi une date c'est un timestamp dans un champs INT et les transformation timestamp to date et date to timestamp se font respectivement avec les fonctions date et mktime (données par NewsletTux)

n°1841209
omega2
Posté le 21-01-2009 à 15:51:07  profilanswer
 

D'un autre côté, c'est bête à dire, mais le timestamp mysql est limité à la mi 2037. De plus pour une seconde donné, le timestamp mysql et le timestamp php diffèrent ce qui pose quelques problèmes quand on ne fait pas attention.
 
Enfin bon, le principal, c'est de savoir ce qu'on veut et qu'on fasse attention aux contraintes.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Help me : problème de date/heure du moment en php

 

Sujets relatifs
afficher une image probleme[Java] Problème de lecture dans un fichier
Problème avec Joomlaunset pose problème
Outil help desk - apercu du sujetProblème disposition d'un menu déroulant d'une barre
Problème tableau php[resolu] [ajax/mootools] problème Fx.Tween ?
Problème avec Yahoo PipesProbleme création d'une macro [Macro Runner]
Plus de sujets relatifs à : Help me : problème de date/heure du moment en php


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR