calculer le nombre de mois e ntre 2 dates

Eléphant du PHP | 187 Messages

07 juin 2012, 11:06

salut,
je retourne vers vous pour un problème qu'après des recherches j'ai pas encore réussi à résoudre.
Donc je cherche une fonction s'il existe sur PHP pour calculer ENTRE deux dates sélectionnées le nombre de visite pour chaque MOIS !
par exemple:DU 2012-01-01 AU 2012-05-01,comment calculer et savoir les mois existants entre ces deux dates?
j'ai pensé à http://www.timestamp.fr/ mais j'ai trouvé que c'est pas le cas!

merci d'avance pour toute idée qui peut me guider à résoudre ce problème.

ViPHP
xTG
ViPHP | 7331 Messages

07 juin 2012, 11:35

Regardes du côté de la fonction strtotime().
Son premier argument est très intéressant pour ce que tu veux.
Cela te permettra d'incrémenter un timestamp par mois.
Ensuite une petite boucle pour arriver jusqu'à la date voulue et tu auras eu une itération par mois. ;)

Eléphant du PHP | 187 Messages

07 juin 2012, 11:40

re!
bon j'ai trouvé une fonction qui marche bien avec des valeurs bidon:
function datediff($a,$b){
$date1 = intval(substr($a,0,4))*12+intval(substr($a,4,2));
$date2 = intval(substr($b,0,4))*12+intval(substr($b,4,2));
return $date1-$date2;
}
datediff('200402','200312');
Mais quand j'ai essayé d'exploiter ça en utilisant mes vars :$date_debut et $date_fin ça marché pas!
j'ai remplacé les deux derniers lignes par :
return $date_fin-$date_debut;
}
datediff('$date_debut','$date_fin'); 
j’espère quelqu’un peut me corriger ça

Eléphant du PHP | 187 Messages

07 juin 2012, 11:43

Regardes du côté de la fonction strtotime().
Son premier argument est très intéressant pour ce que tu veux.
Cela te permettra d'incrémenter un timestamp par mois.
Ensuite une petite boucle pour arriver jusqu'à la date voulue et tu auras eu une itération par mois. ;)
sorry décalage ..
pour la fonction strtotime() y a t il un exemple simple pour comprendre d'abord ?
sinon ce que j'ai proposé en haut ça va en mon cas ?

ViPHP
xTG
ViPHP | 7331 Messages

07 juin 2012, 11:45

Explication de ton problème :
$test = 'world';
echo 'hello $test'; // hello $test
echo "hello $test"; // hello world
echo 'hello '. $test; // hello world
Pour des exemples de strtotime() il y en a une flopée dans la documentation de la fonction. :)

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

07 juin 2012, 12:07

salut,

pour en revenir au sujet de départ Datetime::Diff

qui retourne un DateInterval qui te fournira la valeur que tu souhaite.

le tout en 3 lignes.

mais nécessite PHP > 5.3

@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 187 Messages

07 juin 2012, 13:08

merci pour vos feedback,
mais j'ai bien aimé que quelqu’un peut me corriger ou me confirmer si la méthode adaptée en haut si'elle est ok ou non!
sinon j'ai perdu le fil vraiment :/

ViPHP
xTG
ViPHP | 7331 Messages

07 juin 2012, 14:20

Tu n'es pas capable de tester et de vérifier que le résultat est correct par toi même ?

Eléphant du PHP | 187 Messages

07 juin 2012, 14:52

lol mais j'ai déjà indiqué que ce que j'ai testé ça marche pas!
c'est pas grave je recopie :
function datediff($a,$b){
$date1 = intval(substr($a,0,4))*12+intval(substr($a,4,2));
$date2 = intval(substr($b,0,4))*12+intval(substr($b,4,2));
return $date1-$date2;
//echo datediff; 
}
echo datediff("$date1","$date2");

ViPHP
xTG
ViPHP | 7331 Messages

07 juin 2012, 15:21

Il y a quoi dans $date1 et $date2 ?

ViPHP
ViPHP | 2577 Messages

07 juin 2012, 16:27

si tu as une date dans une table des visites :
select year(taDate), month(taDate), count(*) from taTableVisite where taDate betwen '2012-01-01' and '2012-05-01' group by year(taDate), month(taDate)


Ca peux répondre à ta question... mais attention au format de la date pour la sélection.

Eléphant du PHP | 187 Messages

07 juin 2012, 18:48

si tu as une date dans une table des visites :
select year(taDate), month(taDate), count(*) from taTableVisite where taDate betwen '2012-01-01' and '2012-05-01' group by year(taDate), month(taDate)


Ca peux répondre à ta question... mais attention au format de la date pour la sélection.
Merci beaucoup,elle réponds bien :)