Newsgroup: it.comp.www.php
Titolo: dubbio nella gestione delle date

forse è banale ma la mia inesperienza non mi ci fa arrivare: come faccio a 
sapere quanti mercoledi ci sono tra venerdi 27 ottobre 2006 e sabato 28 
luglio 2007?
grazie mille,
nico

nicolakit wrote:

credo che la funzione corretta sia: 
http://it2.php.net/strtotime
-- 
non stare in buco

> 
http://it2.php.net/strtotime
è un po' che ci giro intorno ma una funzine che mica il numero di mercoledi 
tra un giorno e un altro mica ancora l'ho trovata.......
grazie comunque
nico

nicolakit ha scritto:

1)calcola che giorno è il giorno di partenza con date("w")
2)calcola che giorno è il giorno finalecon date("w")
3)calcola i giorni di differenza tra una data e l'altra
4)dividi per 7 (divisione intera) e trovi il numero di settimane intere
se 2) >3 aggiungi 1 4)
-- 
"20060207: buongiorno italia, buongiorno maria.
con gli occhi pieni di malinconia"

 4)dividi per 7 (divisione intera) e trovi il numero di settimane intere
grazie, ma il passo 3) è proprio quello che non so fare: come faccio a 
sapere quanti giorni ci sono tra venerdi 27 ottobre 2006 e sabato 28 luglio 
2007? Dopodiché a divedere quel numero per 7 ero bravo anch'io....
:-)
grazie mille comunque
baci
nico

nicolakit ha scritto:

aspé che ho detto na vaccata
<?
$ts_giorno_iniziale=mktime(0,0,0,10,27,2006);
$ts_giorno_finale=mktime(0,0,0,07,27,2007);
$giorno_iniziale=date("w",$ts_giorno_iniziale);
$giorno_finale=date("w",$ts_giorno_iniziale);
$settimane_intere=floor((floor($ts_giorno_finale/86400)-floor($ts_giorno_iniziale/86400))/7);
$giorni_rimanenti=(floor($ts_giorno_finale/86400)-floor($ts_giorno_iniziale/86400))%7;
?>
ti manca da capire se i giorni rimanenti ti danno un mercoledì in +


 2007? Dopodiché a divedere quel numero per 7 ero bravo anch'io....
Converti le date in timestamp (ovvero secondi al 1/1/1970), fai la 
differenza tra i due timestamp, dividi per 86400 e hai il numero dei giorni.
Per ottenere il timestamp: strtotime oppure mktime
	Francesco

 
credo che + o meno funzioni così:
<?
$ts_giorno_iniziale=mktime(0,0,0,10,27,2006);
$ts_giorno_finale=mktime(0,0,0,7,27,2007);
$giorno_iniziale=date("w",$ts_giorno_iniziale);
$giorno_finale=date("w",$ts_giorno_iniziale);
$settimane_intere=floor((floor($ts_giorno_finale/86400)-floor($ts_giorno_iniziale/86400))/7);
$giorni_rimanenti=(floor($ts_giorno_finale/86400)-floor($ts_giorno_iniziale/86400))%7;
//print "$settimane_intere\n$giorni_rimanenti\n";
if ($giorni_rimanenti>0) {
     if ($giorno_finale>3){
         if ($giorno_finale+$giorni_rimanenti>=10) {
             $mercoledi=$settimane_intere+1;
         } else {
             $mercoledi=$settimane_intere;
         }
     } else {
         if(($giorno_finale+$giorni_rimanenti)>=3) {
             $mercoledi=$settimane_intere+1;
         } else {
             $mercoledi=$settimane_intere;
         }
     }
} else {
     $mercoledi=$settimane_intere;
}
print "$mercoledi mercoledi\n";
?>


 credo che + o meno funzioni cosě:


 ?>
Non sarebbe più semplice ottenere la settimana del giorno d'inizio,
quella del giorno di fine e basta?
Una cosa del genere..
$giornoInizio = mktime(0,0,0,10,27,2006);
$giornoFine = mktime(0,0,0,7,27,2007);
$settimanaInizio = date( "W", $giornoInizio );
$settimanaFine = date( "W", $giornoFine );
// faccio il calcolo escludendo le settimane in cui ci sono i giorni di
inizio e fine
$tot = 52 - $settimanaInizio + $settimanaFine - 1;
// se il giorno d'inizio è precedente al mercoledi' aggiungo 1
if ( date( "w", $giornoInizio ) < 4 )
   $tot++;
// se il giorno di fine è mercoledi' o un giorno sucessivo aggiungo 1
if ( date( "w", $giornoFine ) > 3 )
   $tot++;
return $tot;
Ovviamente ci vanno anche dei controlli nel caso i limiti
dell'intervallo cadano nei i primi od ultimi giorni dell'anno, dato che
viene restituito sempre 52 come numero di settimana. Lo lascio come
esercizio ai lettori ;)
Mattia

 Mattia
