Convertir nombre de jours en mois

Eléphant du PHP | 136 Messages

03 déc. 2008, 12:02

Bonjour,

J'ai fait un script qui va trouver l'écart en nombre de jour entre deux dates.
J'utilise pour cela mktime() et timestamp().
Jusque là rien de bien compliqué.

Cependant j'aimerai utiliser ce résultat pour faire une boucle qui listerait tous les mois entre ces deux dates.

Ex : écart entre le 01/09/2008 et le 03/12/2008
$ecart_nbre_jour=93

Affichage des mois entre ces deux dates :
SEPTEMBRE 2008
OCTOBRE 2008
NOVEMBRE 2008
DECEMBRE 2008

Quelqu'un aurait il une idée ? (moi et les...mois ça fait 4!)

Merciiiiii :)
Bisvan :)

ViPHP
ViPHP | 5924 Messages

03 déc. 2008, 13:47

Tu t'y prends mal, je ne vois pas en quoi je nombre de jours peut t'aider…
Il faut utiliser simplement la partie mois de la date…

Eléphant du PHP | 422 Messages

03 déc. 2008, 13:47

Un simple tableau contenant les mois
1-->janvier
2-->février
...
12->décembre

tu connais l'indice de ton mois de départ (9) et celui de ton mois d'arrivée (12). Il ne te reste plus qu'à afficher les éléments 9 à 12 du tableau. Et si tu changes d'année, tu recommences à 1.

Sinon, tu peux jouer avec une boucle strtotime("+1 month", $ts) qui commence avec le $ts (timestamp) de ta date de départ et qui finit dès que tu as dépassé le $ts de ta date d'arrivée.

Eléphant du PHP | 136 Messages

04 déc. 2008, 10:49

En fait je suis une truffe...vous avez raison :) je me suis compliqué la vie !

Bon j'ai fait une boucle un peu "artisanale" car je trouvais pas comment gérer le strtotime("+1 month", $ts) dans un for().

La voici :
setlocale(LC_TIME, 'fr_FR');

$mois_debut="9";
$annee_debut="2008";

$mois_fin="4";
$annee_fin="2010";

for($a=$annee_debut; $a <= $annee_fin; $a++)
{
	if($a!=$annee_debut && $a!=$annee_fin)
	{
		for($m=1; $m <= 12; $m++)
		{
		$mois=strftime("%B", mktime(0, 0, 0, $m, 1, $a));
		echo ''.$mois.' '.$a.'<BR>';
		}
	}
	elseif($a!=$annee_debut && $a==$annee_fin)
	{
		for($m=1; $m <= $mois_fin; $m++)
		{
		$mois=strftime("%B", mktime(0, 0, 0, $m, 1, $a));
		echo ''.$mois.' '.$a.'<BR>';
		}
	}
	else
	{
		for($m=$mois_debut; $m <= 12; $m++)
		{
		$mois=strftime("%B", mktime(0, 0, 0, $m, 1, $a));
		echo ''.$mois.' '.$a.'<BR>';
		}
	}

}
Je sais c'est pas beau :? mais si vous avez une idée pour rendre cette fonction un peu plus "design" je suis preneur :P
Bisvan :)

ViPHP
ViPHP | 4674 Messages

04 déc. 2008, 14:08

Hey :),

Sékil' a donné la solution. Tu arrives à obtenir l'écart entre deux dates (par une simple soustraction si tu travailles avec le format TimeStamp). Une petite boucle avec une valeur temporaire, un bref calcul Mathématiques pour s'éviter des boucles trop longues, et on utilise la fonction date('d') pour afficher le résultat, et le tour est joué. Oublie ton code et revoit ça au calme, la solution n'est pas si compliquée :).
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).