Come da titolo... conoscendo un mese X come si fa a sapere i giorni in numeri di tutti i mercoledì (o qualsiasi altro giorno) di questo dato mese X?
![]()
Come da titolo... conoscendo un mese X come si fa a sapere i giorni in numeri di tutti i mercoledì (o qualsiasi altro giorno) di questo dato mese X?
![]()
Magari è molto più banale utilizzando strtotime(), io ho pensato ad una cosa del genere
Codice PHP:
<?php
$mese = "2006-10-01";
$arr = explode('-', $mese);
$data = strtotime($mese);
for($i=1; $i<=date('t',$data); $i++) {
$giorno = $arr[0] . "-" . $arr[1] . "-" . $i;
$timestamp = strtotime($giorno);
if(date('w', $timestamp) == 3) $mercoledi[] = $i;
}
print_r($mercoledi);
?>
mi è piaciuto il problema e ho fato una funzioncina (che funge per qualsiasi giorno della settimana)
La invochi così:Codice PHP:
function find_weekdays($mese,$anno,$weekday)
{
//trovo il primo mercoledì
$giorni = 1; //mi serve per scorrere i primi giorni del mese. Farò al massimo 7 tentativi
while(date('w', mktime(0,0,0,$mese,0,$anno)+$giorni*86400) != $weekday) $giorni++;
$days[] = $giorni; /finito il ciclo $giorni sarà il primo $weekday del mese
//per gli altri aggiungo 7 giorni al $weekdaiprecedente finchè non finisce il mese
for($i=1; checkdate($mese,$new=$days[$i-1]+7,$anno); $i++) $days[$i]=$new;
return $days;
}
//il terzo parametro è 0 per domenica e rprogressivamente cresce fino a 6 per sabato
$merc = find_weekdays(9,2006,3);
foreach($merc as $giorno) echo "$giorno ";
in alternativa anche così vhe dovrebbe essere più efficiente:
function find_weekdays($mese,$anno,$weekday)
{
$english_days = array('Sunday','Monday','Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday');
//trovo il primo mercoledì
$days[] = date('j', strtotime ("next {$english_days[$weekday]}",mktime(0,0,0,$mese,1,$anno)));
//per gli altri aggiungo 7 finchè non finisce il emse
for($i=1; checkdate($mese,$new=$days[$i-1]+7,$anno); $i++) $days[$i]=$new;
return $days;
}
o meglio ancora:
function find_weekdays($mese,$anno,$weekday)
{
//trovo il primo mercoledì
$days[] = date('j', strtotime ("next $weekday",mktime(0,0,0,$mese,1,$anno)));
//per gli altri aggiungo 7 finchè non finisce il emse
for($i=1; checkdate($mese,$new=$days[$i-1]+7,$anno); $i++) $days[$i]=$new;
return $days;
}
a pattoo di passare come terzo parametro il nome del giorno della settimana cercato, ma in inglese
fate vobis![]()
figo!
Vi ho "stimolati" LOL
ora provo le varie soluzioni![]()
ho dato una "pettinata" a quelle di guidozz....Originariamente inviato da PazZII
figo!
Vi ho "stimolati" LOL
ora provo le varie soluzioni![]()
Codice PHP:
<?php
function find_weekdays($mese,$anno,$giorno) {
$listDays = array('Domenica' => 'Sunday','Lunedì' => 'Monday','Martedì' => 'Tuesday',
'Mercoledì' => 'Wednesday', 'Giovedì' => 'Thursday',
'Venerdì' => 'Friday', 'Sabato' => 'Saturday');
$days[] = date('j', strtotime("first {$listDays[$giorno]}", mktime(0,0,0,$mese,0,$anno)));
for($i=1; checkdate($mese, $new = $days[$i-1]+7, $anno); $i++)
$days[$i] = $new;
return $days;
}
$giorno = 'Sabato'; // in italiano
$mese = 9;
$anno = 2006;
$_days = find_weekdays($mese, $anno, $giorno);
echo "<pre>";
print_r($_days);![]()
Il silenzio è spesso la cosa migliore. Pensa ... è gratis.
ho provato per ora solo quest'ultima e funziona.
Molto probabilmente mi aiuterà tantissimo.
In pratica quello che devo fare è un organizer con note che possono essere ripetute.
Cioè una nota in agenda può essere valida e quindi apparire nell'organizer dal 15 agosto al 23 dicembre di ogni lunedì e mercoledì alle ore 10:22.
Agghiacciante.
Magari apro un topic apposito... è un pò ostico sto problema, cmq grazie per adesso. :P
![]()
Altra alternativa![]()
Codice PHP:
<?php
function find_weekdays($mese,$anno,$giorno) {
$days = array('Domenica' => 'Sunday', 'Lunedì' => 'Monday', 'Martedì' => 'Tuesday', 'Mercoledì' => 'Wednesday',
'Giovedì' => 'Thursday', 'Venerdì' => 'Friday', 'Sabato' => 'Saturday');
$first = date('j', strtotime("first {$days[$giorno]}", mktime(0,0,0,$mese,1,$anno)));
$last = date('j', strtotime("last {$days[$giorno]}", mktime(0,0,0,$mese+1,1,$anno)));
for($i=$first; $i<=$last; $i=$i+7) $ris[] = $i;
return $ris;
}
$stampa = find_weekdays(9,2006,'Mercoledì');
print_r($stampa);
?>
hai un bug... lo stesso di guidozz...
![]()
Il silenzio è spesso la cosa migliore. Pensa ... è gratis.
MMMm
Mi sa che anche il tuo script ha un bug (o sono lesso io...)
Il mese in esame è settembre, e nello specifico tutti i Giovedì.Codice PHP:
function find_weekdays($mese,$anno,$giorno) {
$listDays = array('Domenica' => 'Sunday','Lunedì' => 'Monday','Martedì' => 'Tuesday',
'Mercoledì' => 'Wednesday', 'Giovedi' => 'Thursday',
'Venerdì' => 'Friday', 'Sabato' => 'Saturday');
$days[] = date('j', strtotime("first {$listDays[$giorno]}", mktime(0,0,0,$mese,0,$anno)));
for($i=1; checkdate($mese, $new = $days[$i-1]+7, $anno); $i++)
$days[$i] = $new;
return $days;
}
$giorno = 'Giovedi'; // in italiano
$mese = 9;
$anno = 2006;
$_days = find_weekdays($mese, $anno, $giorno);
echo "<pre>";
print_r($_days);
echo "</pre>";
// stampa questo
Array
(
[0] => 31
)
Ma stampa 31 che fra parentesi settembre nemmeno arriva a 31 LOL
E' un errore che si presenta solo con i giovedì.
Indago....