Compter un nombre de jours en timestamp

Compter un nombre de jours en timestamp - PHP - Programmation

Marsh Posté le 26-01-2006 à 17:04:49    

Bonjour à tous !
Voilà, j'enregistre la dernière connexion de mon visiteur en timestamp, en enregistrant time();
Donc, à sa connexion suivante, je veux calculer le nombre de jours où il a été absent !  
Je sais que je peux faire :
 

Code :
  1. $jours = round((time()-$derniereconnex)/(24*3600));


 
Ou un truc dans le genre.  
Mais le problème, avec ça, c'est que ça compte 24 heures, et pas le jour
Je m'explique : Je veux que si le visiteur se connecte le 1er janvier à 18h00, et qu'il revienne le lendemain a 07h00, il y a ait quand même un jour de compté ! ( La, comme on aura $jour < 1, ça ne fonctionnera pas.. )
 
J'espère avoir été clair, et merci d'avance de votre aide :)


---------------
Hello hello super jello
Reply

Marsh Posté le 26-01-2006 à 17:04:49   

Reply

Marsh Posté le 26-01-2006 à 17:12:22    

Est ce que t'as consulté la partie de la documentation sur les dates et heures? Il y a tout ce qu'il faut pour faire des comparaisons de dates et autres manipulations du genre.

Reply

Marsh Posté le 26-01-2006 à 17:17:02    

Tu parles d'une doc' dans le forum HFR ou sur php.net ?
parce que sur php, oui, je peux obtenir les jours via date()
par exemple :
 

Code :
  1. date('d')-date('d', $derniereco)


 
Ok, ca va me retourner les différents jours.. Mais si par exemple la derniere connexion date du 31 janvier, et que il se reconnecte le 1er févrire, ca fera 31-1 = 30 jours de connexion !
c'est ça que je pige pas trop :/


---------------
Hello hello super jello
Reply

Marsh Posté le 26-01-2006 à 17:34:23    

là, tu as pris le jour sans tenir compte du mois ni de l'année.
C'est marrant, j'étais sur qu'il y avait des fonctions faites pour ça.
 
 
Bon, une solution en utilisant les fonctions de dates :

  • utiliser getdate pour obtenir un tableau contenant les dates et heures avec chaque élément séparé
  • utiliser mktime pour retomber sur une date au format timestamp en faisant bien attention de mettre des 0 à la place de l'heure des minutes et des secondes. Ca te retournera des dates plus facile à manipuler
  • faire la soustraction des deux dates obtenu
  • diviser par 24*3600

Reply

Marsh Posté le 26-01-2006 à 17:45:19    

$derniereconnex=strtotime(date(DATE_RFC822))
 
quelque temps plus tard ...
 
$jour=date('z', strtotime(date(DATE_RFC822), $derniereconnex));
 
 
Pas tester donc à vérifier  
 
A+
 
 
 
 

Reply

Marsh Posté le 26-01-2006 à 17:50:12    

Ca fait quoi date() avec trois paramettres?

Reply

Marsh Posté le 26-01-2006 à 17:53:02    

J'ai pas vraiment compris tes fonctions, m3z ?
La $derniereconnex doit être récupérée dans la BDD, qu'est-ce dont que le "DATE_RFC822" ?
 
Ha ! Merci pour le z, j'avais pourtant épluché tout php.net/date..  
Donc, pour les mois c'est réglé, mais pour les changements d'année ? :s


---------------
Hello hello super jello
Reply

Marsh Posté le 26-01-2006 à 18:01:32    

pouzy a écrit :

J'ai pas vraiment compris tes fonctions, m3z ?
La $derniereconnex doit être récupérée dans la BDD, qu'est-ce dont que le "DATE_RFC822" ?
 
Ha ! Merci pour le z, j'avais pourtant épluché tout php.net/date..  
Donc, pour les mois c'est réglé, mais pour les changements d'année ? :s


 
Oui le $derniereconnex est récupérer de la BDD mais avant faut l'écrire avec strtotime(date(DATE_RFC822)).
Le DATE_RFC822 c'est pour avoir un format compatbile avec le strtotime.
Pour les annees tu veux vraiment ?  
ben tu fait un test supplementaire mais avec 'y' =>
$annee=date('y', strtotime(date(DATE_RFC822), $derniereconnex));  
 
A+

Reply

Marsh Posté le 22-02-2009 à 11:40:24    

Citation :

Mais le problème, avec ça, c'est que ça compte 24 heures, et pas le jour[...]
La, comme on aura $jour < 1, ça ne fonctionnera pas..


 
Ca a l'air assez vieux mais si ça peut aider qq'un d'autre: voir peut-être du côté de la fonction ceil pour arrondir le résultat au nombre supérieur:
 

Code :
  1. $jours = ceil((time()-$derniereconnex)/(24*3600));


 
Cédric


Message édité par cccm62 le 22-02-2009 à 11:43:14

---------------
Mes sites sur la création de sites et la finance - comptabilité
Reply

Marsh Posté le 23-02-2009 à 14:09:58    

Si tu n'as toujours pas résolu ton pb, tu peux récupérer dans l'application Astres (cf ma signature) le fichier DateTimeLibrary.php situé dans le répertoire /Astres/Common/. J'ai codé la fonction getNbDaysBetween2Dates() qui donne le nb de jours séparant 2 dates (timestamp) en jours ouvrés ou ouvrables ;)


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed