date dans un select

Eléphant du PHP | 76 Messages

06 nov. 2008, 12:22

Bonjour à tous
dans 2 select j'ai

Code : Tout sélectionner

<select name="mois" size="1"> <option>janvier</option> <option>février</option> <option>mars</option> <option>avril</option> <option>mai</option> <option>juin</option> <option>juillet</option> <option>août</option> <option>septembre</option> <option>octobre</option> <option>novembre</option> <option>décembre</option> </select> <select name="annee" size="1"> <option><?php echo date('Y');?></option> <option><?php echo date('Y')+1;?></option> <option><?php echo date('Y')+2;?></option> </select>
je voudrai mettre les semaines du mois dans un select
<select name="semaine" size="1">
<option>du 01 au 07 </option>
</select>
etc...

pourriez vous m'aiguiller pour le dernier select?
:oops:

Mammouth du PHP | 881 Messages

06 nov. 2008, 17:25

Il y eut une discussion récemment sur les jours de la semaine. As-tu vu ça passer?

http://www.phpfrance.com/forums/viewtop ... highlight=

Une fois que tu auras ça, tu pourras simplement l'appliquer à la formation des <select>.

Revient en précisant l'endroit où tu bloques et nous pourrons t'aider.
Soyez artisans de paix

ViPHP
ViPHP | 3607 Messages

06 nov. 2008, 17:32

Bonjour,
tu pourrais faire quelque chose de très simple, avec uniquement les numéros de semaine
(cf date() et son caractère W )

Eléphant du PHP | 76 Messages

07 nov. 2008, 10:52

j'aurais du aller voir chez les grands :oops:
merci
j'ai testé les 2 codes de Bisvan

je n'arrive toujours pas à faire:

si une semaine commence avant le début du mois ,elle s'affiche

si vous pouvez m'orienter :wink:
function semainesDuMois($datedebut, $datefin) {
 
    $explDateD = explode('/', $datedebut);
    $explDateF = explode('/', $datefin);
    $dateD = $explDateD[2].'-'.$explDateD[1].'-'.$explDateD[0];
    $dateF = $explDateF[2].'-'.$explDateF[1].'-'.$explDateF[0];
    
    $toTimeStart = strtotime($dateD);
    $toTimeEnd = strtotime($dateF);
    $jourDeb = date('w', $toTimeStart);
// début de construction du tableau
echo '<table width="55%" border="0" cellspacing="0" cellpadding="0"><tr>
    <td>NOM DU MOIS</td> ';
// boucle sur les semaines
    while ($toTimeStart < $toTimeEnd) {
        
        $joursRestant = 7 - $jourDeb+5;
        echo date('d\.m\.y', $toTimeStart).' au ';
        $toTimeStart = strtotime('+'.$joursRestant.' day', $toTimeStart);
        echo date('d\.m\.y', $toTimeStart).'<br />';
        $toTimeStart = strtotime('+ 1 day', $toTimeStart);
        $jourDeb = date('w', $toTimeStart);
        
    }
// Suite et fin du tableau
echo '</tr></table>';
} 

$datedebut="01/12/2008";
$datefin="31/12/2008"; 
echo semainesDuMois($datedebut, $datefin);

Eléphant du PHP | 76 Messages

14 nov. 2008, 10:58

bonjour, à tous
un petit up :oops:

je n'arrive toujours pas à faire:

si une semaine commence avant le début du mois ,elle s'affiche
faire du samedi au samedi

Avatar du membre
ViPHP
ViPHP | 3008 Messages

14 nov. 2008, 11:07

Bisvan a fourni un code fonctionnel dans son dernier post, l'as-tu testé ?

Eléphant du PHP | 76 Messages

14 nov. 2008, 11:19

bonjour charabia
je l'ai testé et je n'arrive pas à déborder si la semaine commence avant le mois ou termine après le mois.
en faite, c'est tout le contraire de ce qui l'a fait :oops:

Invité
Invité n'ayant pas de compte PHPfrance

14 nov. 2008, 12:03

je n'arrive pas à déborder si la semaine commence avant le mois ou termine après le mois.
par exemple, pour le mois d'octobre tu veux :

29/09 -> 05/10
06/10 -> 12/10
13/10 -> 19/10
20/10 -> 26/10
27/10 -> 02/11

c'est ça ?

Eléphant du PHP | 76 Messages

14 nov. 2008, 12:15

exact :o

alors j'ai trouvé sur le net et en bidouillant la petite fonction du dessus
j'ai réussi à faire ceci d'accord ce n'est pas beau :oops: mais ça marche presque :o
<?php
function premierjoursemaine($sem,$annee)
{
//cherche le début de l'année en timestamp UNIX  
$annee = mktime(0,0,0,1,1,$annee);
 //retourne la date-heure du premier jour de la semaine numero $weeknb de l'année $year  
$value = $annee + ($sem - 1) * (7 * 86400) - abs(intval(date("w",$annee)) + 1) * 86400;
return mktime(0,0,0,date("m",$value),date("d",$value),date("y",$value));
}
  
function premieretdernierjoursemaine($sem,$annee)
{
$time1 = premierjoursemaine($sem,$annee);
$time2 = $time1 + 604800; // + 7jours en temp unix

$jour1 = date('D d/m/Y', $time1);
$jour7 = date('D d/m/Y', $time2);

return 'Du '.$jour1.' au '.$jour7;
}

function semainesDuMois($datedebut, $datefin) {
 
    $explDateD = explode('/', $datedebut);
    $explDateF = explode('/', $datefin);
    $dateD = $explDateD[2].'-'.$explDateD[1].'-'.$explDateD[0];
    $dateF = $explDateF[2].'-'.$explDateF[1].'-'.$explDateF[0];
    
    $toTimeStart = strtotime($dateD);
    $toTimeEnd = strtotime($dateF);
    $jourDeb = date('w', $toTimeStart);
// début de construction du tableau

// boucle sur les semaines
    while ($toTimeStart < $toTimeEnd) {
        
        $joursRestant = 7 - $jourDeb+6;
        echo $sem= date('W', $toTimeStart);
        $toTimeStart = strtotime('+'.$joursRestant.' day', $toTimeStart); 
        $annee=$explDateD[2];
      echo premieretdernierjoursemaine($sem,$annee).'<br>';
       
        }
// Suite et fin du tableau

} 

$datedebut="01/11/2008";
$datefin="30/11/2008"; 

echo semainesDuMois($datedebut, $datefin).'<p>';
$datedebut="01/12/2008";
$datefin="31/12/2008"; 

echo semainesDuMois($datedebut, $datefin).'<p>';
?>
ar contre il m'affiche:

Code : Tout sélectionner

44Du Sat 25/10/2008 au Fri 31/10/2008 45Du Sat 01/11/2008 au Sat 08/11/2008 46Du Sat 08/11/2008 au Sat 15/11/2008 47Du Sat 15/11/2008 au Sat 22/11/2008 48Du Sat 22/11/2008 au Sat 29/11/2008 49Du Sat 29/11/2008 au Sat 06/12/2008 50Du Sat 06/12/2008 au Sat 13/12/2008 52Du Sat 20/12/2008 au Sat 27/12/2008
la première semaine 44 s'arrête au vendredi.
et il me manque la semaine 51
une petite aide serait la bienvenue :wink:

et si qqun pourrait m'aider à faire qque chose de plus propre :oops:

Invité
Invité n'ayant pas de compte PHPfrance

14 nov. 2008, 21:03

<?php
$an = 2008;
$mois = 10;

$time_premier_lundi = strtotime('+1 day last monday', mktime(0, 0, 0, $mois, 1, $an));
$time_dernier_lundi = strtotime('last monday', mktime(0, 0, 0, ($mois + 1), 1, $an));

$i=0;
$time_lundi = 0;

while($time_lundi < $time_dernier_lundi)
{
	$time_lundi    = strtotime("+$i week", $time_premier_lundi);
	$time_vendredi = strtotime("+$i week +6days", $time_premier_lundi);
	echo date('d/m', $time_lundi),' -> ',date('d/m', $time_vendredi),"<br>\n";
	$i++;
}

?>

Eléphant du PHP | 76 Messages

15 nov. 2008, 11:27

merci invité :wink: =D> =D>

Invité
Invité n'ayant pas de compte PHPfrance

15 nov. 2008, 16:31

je viens de me relire, on peut simplifier.
(désolé pour ce "up" pour si peu)
<?php
$an = 2008;
$mois = 10;

$time_premier_lundi = strtotime('last monday', mktime(0, 0, 0, $mois, 2, $an));
$time_dernier_lundi = strtotime('last monday', mktime(0, 0, 0, ($mois + 1), 1, $an));

$i=0;
$time_lundi = 0;

while($time_lundi < $time_dernier_lundi)
{
	$time_lundi    = strtotime("+$i weeks", $time_premier_lundi);
	$time_vendredi = strtotime("+6 days", $time_lundi);
	echo date('d/m', $time_lundi),' -> ',date('d/m', $time_vendredi),"<br>\n";
	$i++;
}

?>