PDA

View Full Version : [PHP] Ricavare tutti i martedì del mese?


x3d0
05-10-2009, 13:51
Esiste una funzione che mi permette di ricavare tutti i martedì o qualsiasi altro/i giorno della settimana di un certo mese?
Se no, come potrei fare?

antenore
05-10-2009, 14:07
Esiste una funzione che mi permette di ricavare tutti i martedì o qualsiasi altro/i giorno della settimana di un certo mese?
Se no, come potrei fare?

A memoria mi pare con time - strtotime, prova a cercare con google ;)

x3d0
05-10-2009, 14:34
Spiegati meglio

Sirio
05-10-2009, 20:56
Ho fatto questa al volo, ma si poteva fare in tanti altri modi, stampa direttamente l'elenco delle date del mese a cui corrisponde il giorno cercato.

id_giorno corrisponde al numero assegnato dalla funzione PHP "date", cioè:

0 => Domenica
1 => Lunedì
...
...
6 => Sabato


function giorni_del_mese($id_giorno,$mese,$anno)
{
// Ottengo un array così strutturato: $info_mese[0] -> id del primo giorno del mese; $info_mese[1] -> numero di giorni del mese
$info_mese = explode('|',date("w|t",mktime(0, 0, 0, $mese, 1, $anno)));
// Numero di giorni tra il primo del mese e la prima occorrenza del giorno cercato nel mese
$distanza_dal_primo = $id_giorno >= $info_mese[0] ? $id_giorno-$info_mese[0] : $id_giorno-$info_mese[0]+7;
// Prima occorrenza del giorno cercato del mese
$giorno = $distanza_dal_primo + 1;
// Stampa le date coincidenti con il giorno del mese cercato
while ($giorno <= $info_mese[1])
{
echo $giorno.' - '.$mese.' - '.$anno.'<br />';
$giorno += 7;
}
}

$mese_ = 10;
$anno_ = 2009;
$id_giorno_ = 2; // Martedì
giorni_del_mese($id_giorno_,$mese_,$anno_);

x3d0
08-10-2009, 19:07
ciao, e se volessi tutti i martedì e mercoledì ?
Quindi più $id_giorno della stessa settimana

MadJackal
08-10-2009, 19:23
ciao, e se volessi tutti i martedì e mercoledì ?
Quindi più $id_giorno della stessa settimana

Esegui la funzione due volte :Prrr:

Sirio
08-10-2009, 20:25
trasforma la funzione in modo che ritorni un vettore con le date, così poi puoi richiamare la funzione in questo modo:

$martedi_del_mese = giorni_del_mese($id_martedi,$mese,$anno);
$mercoledi_del_mese = giorni_del_mese($id_mercoledi,$mese,$anno);

dove $martedi_del_mese e $mercoledi_del_mese sono due array.

x3d0
08-10-2009, 21:14
Grazie, ho risolto.
Posto il codice in caso servisse a qualcun'altro



foreach($this->giorni_anno($multiples_days_from) as $giorno){
$string[] = $giorno;
}

function giorni_anno($ids_giorno)
{

$years[0] = date('Y') - 1;
$years[1] = date('Y');
$years[2] = date('Y') + 1;

foreach($years as $year){
for($month = 1; $month <= 12; $month++){
foreach($ids_giorno as $id_giorno){
// Ottengo un array così strutturato: $info_mese[0] -> id del primo giorno del mese; $info_mese[1] -> numero di giorni del mese
$info_mese = explode('|',date("w|t",mktime(0, 0, 0, $month, 1, $year)));
// Numero di giorni tra il primo del mese e la prima occorrenza del giorno cercato nel mese
$distanza_dal_primo = $id_giorno >= $info_mese[0] ? $id_giorno-$info_mese[0] : $id_giorno-$info_mese[0]+7;
// Prima occorrenza del giorno cercato del mese
$giorno = $distanza_dal_primo + 1;
// Stampa le date coincidenti con il giorno del mese cercato
while ($giorno <= $info_mese[1])
{

$giorni[] = date('d-m-Y', mktime(0, 0, 0, $month, $giorno, $year));

$giorno += 7;
}
}

}
}



return $giorni;

}