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....