afficher mois par mois entre 2 dates

morco73
Invité n'ayant pas de compte PHPfrance

21 nov. 2012, 10:09

j'ai donc repris une fonction et j'aimerais afficher mois par mois entre 2 dates, même si le mois ne dure que 2 ou 3 jours .
$dStart=$_POST['date_debut'];
							$dEnd=$_POST['date_fin'];
							$nom=$_POST['nom'];
							function getDatesBetween($start, $end)
							{
								if($start > $end)
								{
									return false;
								}    
								
								$sdate    = strtotime($start);
								$edate    = strtotime($end);
								
								$dates = array();
								
								for($i = $sdate; $i < $edate; $i += strtotime('+1 month', 0))
								{
									$dates [] = date('Y-m-d', $i);
								}
								
								return $dates;
							}


							?>
je l'ai afficher de cette façon :
<?php 
								$aDates = getDatesBetween ($dStart,$dEnd);
								foreach($aDates as $date)
								{ ?>
								<input type="hidden" id="nom" name="nom" value="<?php echo $nom; ?>" size="" />
								<input type="text" id="date" name="date[]" value="<?php echo $date; ?>" size="8" readonly="readonly" style="border: none;"  />
								<input type="text" name="nb[]" size="5" /><br>
								<?php } ?>
cela me permet de saisir pour chaque mois un nombre .
et pour l'instant cela m'affiche que les mois entier ! comment puis je faire ?
merci d'avance

Avatar du membre
Mammouth du PHP | 1609 Messages

21 nov. 2012, 10:44

Salut, pourrais tu nous montrer l'affichage que tu cherches à obtenir car je ne suis pas sur d'avoir compris ta demande ?
Développeur web depuis + de 20 ans

morco73
Invité n'ayant pas de compte PHPfrance

21 nov. 2012, 11:03

merci d'avoir reponu sahian

par exemple je met la date debut 2012/01/25 et date fin 2012/03/06:

et ca m'affiche dans un formulaire : 2012/01/25 : (j'ecris le nb jours ouvré en saisie)
2012/02/01: (j'ecris le nb jours ouvré en saisie)
2012/02/02: (j'ecris le nb jours ouvré en saisie)

et moi pour l'instant ca n'affiche que le mois 2012/01 et 2012/02 et pas 2012/03

merci

Avatar du membre
Mammouth du PHP | 1609 Messages

21 nov. 2012, 11:08

Alors mets <= pour le test de sortie de boucle non ?
Développeur web depuis + de 20 ans

morco73
Invité n'ayant pas de compte PHPfrance

21 nov. 2012, 11:23

pas bete ! mais j'ai essayer et la page ne se charge pas le délai d'attente est trop long .
as-tu d'autres idée ?

merci

Avatar du membre
Mammouth du PHP | 1609 Messages

21 nov. 2012, 11:33

La solution du <= fonctionne mais tu auras toujours un problème de jour.
Si le date start est au 2012-09-15 et le date end est au 2012-12-14 alors quand tu testeras le dernier mois tu auras 2012-12-15 <= 2012-12-14 == false.
A la limite si le jour n'est pas important met le au premier par exemple.
Développeur web depuis + de 20 ans

morco73
Invité n'ayant pas de compte PHPfrance

21 nov. 2012, 11:47

comment ca se fait que ca ne charge pas la page ?
for($i = $sdate; $i < $edate; $i <= strtotime ('+1 month',0) )
								{
									$dates [] = date('Y-m-d', $i);//ligne 61
								}
et ca m'ecrit l'erreur Fatal error: Maximum execution time of 30 seconds exceeded in C:\wamp\www\Contrat de travail\insertion2.php on line 61

merci

morco73
Invité n'ayant pas de compte PHPfrance

21 nov. 2012, 11:49

eh oui le jours n'est pas important pour moi !

Avatar du membre
Mammouth du PHP | 1609 Messages

21 nov. 2012, 11:51

Le test de sortie c'est la deuxième instruction du for pas la dernière. ;)
La dernière c'est l'instruction d'incrémentation.
for($i = $sdate; $i <= $edate; $i += strtotime ('+1 month',0))
Développeur web depuis + de 20 ans

morco73
Invité n'ayant pas de compte PHPfrance

21 nov. 2012, 12:05

okay je suis desolé je suis novice.

j'ai fais ta modification mais cela ne marche toujours pas .

par exemple : date debut = 2012-11-30
date fin = 2012-12-13

et ca m'affiche que 2012-11-30 !!

pas facile

merci pour ta patience

Avatar du membre
Mammouth du PHP | 1609 Messages

21 nov. 2012, 12:11

C'est ce que je te disais dans mon message précédent :
Si le date start est au 2012-09-15 et le date end est au 2012-12-14 alors quand tu testeras le dernier mois tu auras 2012-12-15 <= 2012-12-14 == false.
A la limite si le jour n'est pas important met le au premier par exemple.
2012-12-30 > 2012-12-13 et donc ça ne passe pas dans la boucle pour le 2012-12-30.
Développeur web depuis + de 20 ans

morco73
Invité n'ayant pas de compte PHPfrance

21 nov. 2012, 12:24

oui j'avais compris :)

mais que changer dans ma boucle pour que cela passe ?

merci d'avance

Avatar du membre
Mammouth du PHP | 1609 Messages

21 nov. 2012, 12:25

Avec ça, ça fonctionne mais affiche 2012-11-01 et 2012-12-01:
list($year, $month) = explode('-', $start);
$sdate = strtotime("$year-$month-01");
list($year, $month) = explode('-', $end);
$edate = strtotime("$year-$month-01");

$dates = array();
for($i = $sdate; $i <= $edate; $i = strtotime('+1 month', $i))
{
  $dates[] = date('Y-m-d', $i);
}
Développeur web depuis + de 20 ans

morco73
Invité n'ayant pas de compte PHPfrance

21 nov. 2012, 12:32

merci beaucoup ! c'est parfait !