Page 1 sur 1

Convertir nombre de jours en mois

Posté : 03 déc. 2008, 12:02
par Bisvan
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 :)

Posté : 03 déc. 2008, 13:47
par Sékiltoyai
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…

Posté : 03 déc. 2008, 13:47
par caroube
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.

Posté : 04 déc. 2008, 10:49
par Bisvan
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

Posté : 04 déc. 2008, 14:08
par Hywan
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 :).