Newsgroup: it.comp.www.php
Titolo: problemi bisestili

Salve,
ho una funzione che calcola le date del periodo pasquale per scriverle
in un calendario.
Normalmente la funzione è questa:
---
$SecDay = 86400 ;
$anno = 2004;  // in realtà potrebbe prenderla da un input
// Gauss insegna:
$a = $anno % 19 ; $b = floor( $anno / 100) ; $c = $anno % 100 ;
        $p = (19 * $a + $b - floor( $b / 4 ) - floor( ($b - floor( ($b +
8) / 25) + 1) / 3) + 15) % 30 ;
        $q = (32 + 2 * (($b % 4) + floor( $c / 4 ) ) - $p - ($c % 4)) %
7 ;
        $r = $p + $q - 7 * ( floor( ($a + 11 * $p + 22 * $q) / 451)) +
114 ;
        // mese : floor($r/31) , giorno: $r%31+1
        $unixPasqua = mktime ( 0 , 0 , 0 , floor($r/31) , $r%31+1 ,
$anno ) ;   // (hour,minute,second,month,day,year)
        $festa [ strftime("%m%d",$unixPasqua-46*$SecDay) ] = "Le Ceneri"
;
        $festa [ strftime("%m%d",$unixPasqua-42*$SecDay) ] = "I
Quaresima" ;
        $festa [ strftime("%m%d",$unixPasqua-35*$SecDay) ] = "II
Quaresima" ;
        $festa [ strftime("%m%d",$unixPasqua-28*$SecDay) ] = "III
Quaresima" ;
        $festa [ strftime("%m%d",$unixPasqua-21*$SecDay) ] = "IV
Quaresima" ;
        $festa [ strftime("%m%d",$unixPasqua-14*$SecDay) ] = "V
Quaresima" ;
        $festa [ strftime("%m%d",$unixPasqua-7*$SecDay) ]  = "Le Palme"
;
        $festa [ strftime("%m%d",$unixPasqua) ]            = "Pasqua" ;
        $festa [ strftime("%m%d",$unixPasqua+1*$SecDay) ]  = "Lunedi`
dell'Angelo" ;
        $festa [ strftime("%m%d",$unixPasqua+7*$SecDay) ]  = "Domenica
in Albis" ;
        $festa [ strftime("%m%d",$unixPasqua+14*$SecDay) ]  = "III
Domenica di Pasqua" ;
        $festa [ strftime("%m%d",$unixPasqua+21*$SecDay) ]  = "IV
Domenica di Pasqua" ;
        $festa [ strftime("%m%d",$unixPasqua+28*$SecDay) ]  = " V
Domenica di Pasqua" ;
        $festa [ strftime("%m%d",$unixPasqua+35*$SecDay) ]  = "VI
Domenica di Pasqua" ;
        $festa [ strftime("%m%d",$unixPasqua+42*$SecDay) ] =
"Ascensione" ;
        $festa [ strftime("%m%d",$unixPasqua+49*$SecDay) ] =
"Pentecoste" ;
        $festa [ strftime("%m%d",$unixPasqua+56*$SecDay) ] = "SS.
Trinita`" ;
        $festa [ strftime("%m%d",$unixPasqua+63*$SecDay) ] = "Corpus
Domini" ;
---
Negli anni normali funziona, ma quest'anno bisestile funziona da marzo
in poi, se non erro, per cui oggi indicherebbe "I Quaresima", mentre è
domani. Ovvero calcola $unixPasqua-42*$SecDay mentre dovrebbe tener
conto della correzione e calcolare -41 (idem per "Le Ceneri" che
quest'anno viene -45 e non -46). 
Se si fa stampare qualcosa come
        $datapasqua = date ("Ymd",$unixPasqua);
 
        print $datapasqua;
si ottiene 20040411 che è giusto.
Come potrei inserire una correzione valida sempre nel calcolo di $festa?
grazie, ciao
Salvo
-- 
<? echo "Grazie mille! \n"; ?>

 $festa?
http://www.php.net/easter_date
http://www.php.net/calendar
-- 
I am what I am, I do what I can
Sei un newbie? Leggi questo 
http://url.repository.biz/go/1
Inviare email con allegati? 
http://url.repository.biz/go/1Z
Cerchi un programmatore PHP/MySQL? 
http://url.repository.biz/go/1Y
L'uomo, conscio di sbagliare, persevera.

 
http://www.php.net/calendar
grazie, ma non č la risposta che attendevo, perché il server non ha php
con --enable-calendar e non si puň usare easterdate.
Mi basta un consiglio piů adatto e meno asettico, grazie :)
ciao
Salvo

 Mi basta un consiglio piů adatto e meno asettico, grazie :)
http://www.php.net/date#39297
oppure:
bofh at mtel dot net (22-Jan-2003 10:43)
//Easter calculation based upon Oudin's Algorithm
function easter($year,$ortodox=false)
{
$g =  ($year % 19); 
$i =  (19*$g + 15) % 30; 
$j =  ($year + $year/4 + $i)%7;
$l =  $i - $j; 
$month = (int) (3 + (int)($l+40)/44); 
$day   = (int) ($l + 28 - (31*(int)($month/4)));
$date = "$year-$month-$day"; $tstamp = strtotime($date);
return ($ortodox)?date("Y-m-d",$tstamp):date("Y-m-d",strtotime("+13
days",$tstamp));
}
$date = easter(2002);
print $date;


 function easter($year,$ortodox=false)
grazie, è una funziona interessante, ma anche la mia calcola bene la
data della Pasqua.
Il problema è perché se gli faccio calcolare le altre domeniche, con
pasqua-7 giorni è ok, -14 sballa di un giorno -21 pure ecc... +7
funziona, +14 funziona, ecc...
IV quar -28     20040320        errato: è il 21 (20040321)
V quar  -14     20040327        errato è il 28  (20040328)
palme   -7      20040404        giusto
pasqua  0       20040411        giusto
albis   +7      20040418 giusto
III dom +14     20040425        giusto
spero di essermi spiegato: perché dal 27 marzo quest'anno (bisestile) la
formula sballa, mentre gli altri anni ha funzionato?
Sarà una sciocchezza, ma io vorrei far funzionare la *mia* formula, non
implementarne altre, ok?
:-)
buona giornata
Salvo   

 implementarne altre, ok?
function bisestile( $anno ) {
	if( ($anno % 4) == 0 ) {
		if( $anno % 100 == 0 ) {
			if( ($anno % 400) != 0) {
				return 0;
			}
			else {
				return 1;
			}
		}
		else
			return 1;
	}
	else {
		return 0;
	}
}
if (bisestile (date ("Y")))
{
$festa [ strftime("%m%d",$unixPasqua-45*$SecDay) ] = "Le Ceneri";
$festa [ strftime("%m%d",$unixPasqua-41*$SecDay) ] = "I
}
else
{
$festa [ strftime("%m%d",$unixPasqua-46*$SecDay) ] = "Le Ceneri";
$festa [ strftime("%m%d",$unixPasqua-42*$SecDay) ] = "I
}
-- 


       if( ($anno % 4) == 0 ) {
grazie, sei gentilissimo.
Cosě funziona ... tranne tra il 28 e 29 marzo:
$unixPasqua-(13*$SecDay))  mi stampa correttamente 20040329
ma
$unixPasqua-(14*$SecDay)) mi stampa 20040327 al posto di 20040328, e
salta il 28!
in base a quale calcolo, regola, o mio errore?
Per estendere il discorso: per quest'anno posso mettere -14 nella prima
parte if, ma č sempre cosě? 
comunque, per ora funziona, grazie ai tuoi suggerimenti.
ciao :)
Salvo

Ho fatto una prova, per capire il problema che hai, e ho trovato che
la funzione strftime o il calcolo $unixPasqua-14*$SecDay
danno un risultato errato non credo sia colpa del bisestile
<?php
$SecDay = 86400;
$unixPasqua = mktime ( 0 , 0 , 0 , 4 , 11 ,2004 ) ; //
(hour,minute,second,month,day,year)
echo strftime("%d/%m/%Y",$unixPasqua-14*$SecDay) . " 28 Marzo(col
cavolo!)<br>" ;
echo strftime("%d/%m/%Y",$unixPasqua-13*$SecDay) . " 29 Marzo<br>" ;
echo strftime("%d/%m/%Y",$unixPasqua-12*$SecDay) . " 30 Marzo<br>" ;
echo strftime("%d/%m/%Y",$unixPasqua-11*$SecDay) . " 31 Marzo<br>" ;
echo strftime("%d/%m/%Y",$unixPasqua-10*$SecDay) . " 1 Aprile<br>" ;
echo strftime("%d/%m/%Y",$unixPasqua-7*$SecDay) . " Le Palme<br>";
echo strftime("%d/%m/%Y",$unixPasqua) . " Pasqua<br>" ;
?>
non capisco!
adesso faccio altre prove e riferisco
by
r

 echo strftime("%d/%m/%Y",$unixPasqua-13*$SecDay) . " 29 Marzo<br>" ;
infatti il problema sta proprio qui:
-13 dà correttamente 29 marzo
-14 dà invece 27 marzo
salta un giorno!
eppure all'apparenza non ci sono errori...
fammi sapere delle tue prove, grazie!
Salvo

 Salvo
ho scoperto che forse il 28 marzo ha solo 23 ore (sic) per il PHP
<?php phpinfo();
$SecDay = 86400;
$Marzo27=mktime ( 0 , 0 , 0 , 3 , 27 ,2004);
$Marzo28=mktime ( 0 , 0 , 0 , 3 , 28 ,2004);
$Marzo29=mktime ( 0 , 0 , 0 , 3 , 29 ,2004);
echo $Marzo27 ." - ". strftime("%d/%m/%Y",$Marzo27) . " 27 Marzo<br>" ;
echo $Marzo28 ." - ". strftime("%d/%m/%Y",$Marzo28) . " 28 Marzo<br>" ;
echo $Marzo29 ." - ". strftime("%d/%m/%Y",$Marzo29) . " 29 Marzo<br>" ;
echo  $Marzo29-$SecDay." - ". strftime("%d/%m/%Y",$Marzo29-$SecDay) . " 28
Marzo(col cavolo)<br>" ;
echo  $Marzo29-2*$SecDay." - ". strftime("%d/%m/%Y",$Marzo29-2*$SecDay) . "
27 Marzo(col cavolo)<br>" ;
?>
prova questo codice e dimmi cosa ci capisci
by
r

il problema č che il 28 marzo entra in vigore l'ora legale e quindi
quel giorno e' di sole 23 ore !
questa e' la causa del tuo problema,
la soluzione e' :
devi correggere la tua funzione non per tenere conto dei bisestili,
ovviamente, ma dell'ultima domenica di marzo
che e' quella in cui entra in vigore l'ora legale
HTH
by
r

 che e' quella in cui entra in vigore l'ora legale
Yeah!
geniale.
Ma come posso fare a correggere il problema?
Ci sono forumule che calcolano l'entrata in vigore dell'ora legale?
come si potrebbe fare?
Quindi se non ci fosse stata la coincidenza non ce ne saremmo mai
accorti...
ciao,
Salvo
-- 
<? print "Grazie, ora troviamo la soluzione definitiva :-) \n"; ?>

> <? print "Grazie, ora troviamo la soluzione definitiva :-) \n"; ?>
eccola:
echo  strftime("%d/%m/%Y",mktime ( 0 , 0 , 0 , 4 , 11-46 ,2004)) ." Le
Ceneri<br>";
echo  strftime("%d/%m/%Y",mktime ( 0 , 0 , 0 , 4 , 11-42 ,2004)) . " I
Quaresima<br>" ;
echo  strftime("%d/%m/%Y",mktime ( 0 , 0 , 0 , 4 , 11-35 ,2004)) . " II
Quaresima<br>" ;
echo  strftime("%d/%m/%Y",mktime ( 0 , 0 , 0 , 4 , 11-28 ,2004)) . " III
Quaresima<br>" ;
echo  strftime("%d/%m/%Y",mktime ( 0 , 0 , 0 , 4 , 11-21 ,2004)) . " IV
Quaresima<br>" ;
echo  strftime("%d/%m/%Y",mktime ( 0 , 0 , 0 , 4 , 11-14 ,2004)) . " V
Quaresima<br>" ;
echo  strftime("%d/%m/%Y",mktime ( 0 , 0 , 0 , 4 , 11-7 ,2004)) . " Le
Palme<br>";
echo  strftime("%d/%m/%Y",$unixPasqua) . " Pasqua<br>" ;
cosi' funziona
bisogna mettere il calcolo nel campo del giorno della funzione mktime()
c'e' anche scritto nel manuale (non e' chiarissimo ma c'e')
by
r

 bisogna mettere il calcolo nel campo del giorno della funzione mktime()
fammi capire, cosa indica "11-7" "11-14" ecc.?
inoltre questa è ok per quest'anno, ma dobbiamo generalizzarla. Abbiamo
l'anno in $anno, potremmo sostituire la varibile?
ciao
salvo

 salvo
bye
r

 cosi via.
baterebbe allora ricompattare questo output in quel formato (20040411
per Pasqua, ecc...).
A meno di rivedere altri parti dello script...
cosa mi consigli?
Appena sarà completa metterò online l'intera pagina e il database dei
Santi del giorno rivisto e corretto.
ciao
Salvo
-- 
se vuoi scrivermi privatamente salvomic at mac dot com ciao

 Salvo
bye
r


 per Pasqua, ecc...).
tipo:
$festa [ strftime("%m%d", mktime ( 0 , 0 , 0 , $mesepasqua,
$giornopasqua - 46, $anno ) ] = "Le Ceneri" ;
        $festa [ strftime("%m%d",mktime ( 0 , 0 , 0 , $mesepasqua,
$giornopasqua - 42, $anno ) ] = "I  Quaresima" ;
        $festa [ strftime("%m%d",mktime ( 0 , 0 , 0 , $mesepasqua,
$giornopasqua - 35, $anno ) ] = "II Quaresima" ;
        $festa [ strftime("%m%d",mktime ( 0 , 0 , 0 , $mesepasqua,
$giornopasqua - 28, $anno ) ] = "III Quaresima" ;
        $festa [ strftime("%m%d",mktime ( 0 , 0 , 0 , $mesepasqua,
$giornopasqua - 21, $anno ) ] = "IV Quaresima" ;
        $festa [ strftime("%m%d",mktime ( 0 , 0 , 0 , $mesepasqua,
$giornopasqua - 14, $anno ) ] = "V Quaresima" ;
        $festa [ strftime("%m%d",mktime ( 0 , 0 , 0 , $mesepasqua,
$giornopasqua - 7, $anno ) ]  = "Le Palme" ;
        $festa [ strftime("%m%d",$unixPasqua) ]            = "Pasqua" ;
        $festa [ strftime("%m%d",mktime ( 0 , 0 , 0 , $mesepasqua,
$giornopasqua +1, $anno ) ]  = "Lunedi` dell'Angelo" ;
        $festa [ strftime("%m%d",mktime ( 0 , 0 , 0 , $mesepasqua,
$giornopasqua + 7, $anno ) ]  = "Domenica in Albis" ;
        $festa [ strftime("%m%d",mktime ( 0 , 0 , 0 , $mesepasqua,
$giornopasqua + 14, $anno ) ]  = "III Domenica di Pasqua" ;
        $festa [ strftime("%m%d",mktime ( 0 , 0 , 0 , $mesepasqua,
$giornopasqua + 21, $anno ) ]  = "IV Domenica di Pasqua" ;
        $festa [ strftime("%m%d",mktime ( 0 , 0 , 0 , $mesepasqua,
$giornopasqua +28, $anno ) ]  = " V Domenica di Pasqua" ;
        $festa [ strftime("%m%d",mktime ( 0 , 0 , 0 , $mesepasqua,
$giornopasqua + 35, $anno )]  = "VI Domenica di Pasqua" ;
        $festa [ strftime("%m%d",mktime ( 0 , 0 , 0 , $mesepasqua,
$giornopasqua + 42, $anno ) ] = "Ascensione" ;
        $festa [ strftime("%m%d",mktime ( 0 , 0 , 0 , $mesepasqua,
$giornopasqua + 49, $anno ) ] = "Pentecoste" ;
        $festa [ strftime("%m%d",mktime ( 0 , 0 , 0 , $mesepasqua,
$giornopasqua + 56, $anno )) ] = "SS. Trinita`" ;
        $festa [ strftime("%m%d",mktime ( 0 , 0 , 0 , $mesepasqua,
$giornopasqua + 63, $anno ) ] = "Corpus Domini" ;
ok?
salvo

 
Visto che la funzione è opera mia potevi chiedermi l'errata corrige...
   $unixPasqua = mktime ( 12 , 0 , 0 , floor($r/31) , $r%31+1 , $anno ) ;
Basta modificare questa linea per prendere "mezzogiorno" anziché
mezzanotte, altrimenti hai appunto quell'errore.
In ogni caso posto il codice attuale della funzione, così vedi se
ci sono altre cose che possono essere utili: ad esempio ho aggiunto
la dicitura per ricordare inizio e fine dell'ora legale.
Bye
gp
function RicorrenzeReligiose ($anno)
{
   // da modificare a piacimento
      $PatronoDay = "0113" ; $Patrono = "Sant'Ilario (patrono di Parma)" 
;    // 13 gennaio
   // $PatronoDay = "1209" ; $Patrono = "Sant'Ambrogio (patrono di 
Milano)" ; // 9 dicembre
   $SecDay = 86400 ; // numero di secondi in un giorno
   $anno4 = sprintf("%04d",$anno) ;
   $festa = array() ;
   // Pasqua & company
   $a = $anno % 19 ; $b = floor( $anno / 100) ; $c = $anno % 100 ;
   $p = (19 * $a + $b - floor( $b / 4 ) - floor( ($b - floor( ($b + 8) / 
25) + 1) / 3) + 15) % 30 ;
   $q = (32 + 2 * (($b % 4) + floor( $c / 4 ) ) - $p - ($c % 4)) % 7 ;
   $r = $p + $q - 7 * ( floor( ($a + 11 * $p + 22 * $q) / 451)) + 114 ;
   // mese : floor($r/31) , giorno: $r%31+1
   $unixPasqua = mktime ( 12 , 0 , 0 , floor($r/31) , $r%31+1 , $anno ) 
;   // (hour,minute,second,month,day,year)
   $festa [ strftime("%m%d",$unixPasqua-46*$SecDay) ] = "Le Ceneri" ;
   $festa [ strftime("%m%d",$unixPasqua-42*$SecDay) ] = "1ª Quaresima" ;
   $festa [ strftime("%m%d",$unixPasqua-35*$SecDay) ] = "2ª Quaresima" ; 
       //  P-35
   $festa [ strftime("%m%d",$unixPasqua-28*$SecDay) ] = "3ª Quaresima" ; 
       //  P-28
   $festa [ strftime("%m%d",$unixPasqua-21*$SecDay) ] = "4ª Quaresima" ; 
       //  P-21
   $festa [ strftime("%m%d",$unixPasqua-14*$SecDay) ] = "5ª Quaresima" ; 
       //  P-14
   $festa [ strftime("%m%d",$unixPasqua-7*$SecDay) ]  = "Le Palme" ; 
        //  P-7
   $festa [ strftime("%m%d",$unixPasqua) ]            = "Pasqua" ;
   $festa [ strftime("%m%d",$unixPasqua+$SecDay) ]    = "Lunedì 
dell'Angelo" ; // P+1
   $festa [ strftime("%Y%m%d",$unixPasqua+$SecDay) ] = 1 ;  // non 
lavorativo
   $festa [ strftime("%m%d",$unixPasqua+7*$SecDay) ]  = "2ª domenica di 
Pasqua (in Albis)" ;
   $festa [ strftime("%m%d",$unixPasqua+14*$SecDay) ] = "3ª domenica di 
Pasqua" ;
   $festa [ strftime("%m%d",$unixPasqua+21*$SecDay) ] = "4ª domenica di 
Pasqua" ;
   $festa [ strftime("%m%d",$unixPasqua+28*$SecDay) ] = "5ª domenica di 
Pasqua" ;
   $festa [ strftime("%m%d",$unixPasqua+35*$SecDay) ] = "6ª domenica di 
Pasqua" ;
   $festa [ strftime("%m%d",$unixPasqua+42*$SecDay) ] = "Ascensione" ; 
        // (40?)
   $festa [ strftime("%m%d",$unixPasqua+49*$SecDay) ] = "Pentecoste" ; 
        //
   $festa [ strftime("%m%d",$unixPasqua+56*$SecDay) ] = "SS.Trinità" ; 
        //
   $festa [ strftime("%m%d",$unixPasqua+63*$SecDay) ] = "Corpus Domini" 
;      // (60?)
   // Natale & company
   $unixNatale = mktime ( 12 , 0 , 0 , 12 , 25 , $anno ) ;   // 
(hour,minute,second,month,day,year)
   $weekdayNatale = strftime("%w", $unixNatale )+0 ; // giorno della 
settimana in cui cade il Natale (0 dom ... 6 sab)
   $unixUltimaAvvento = $unixNatale - $SecDay * ( ( ( $weekdayNatale + 6 
) % 7 ) + 1 )  ;
   $festa [ strftime("%m%d",$unixUltimaAvvento-28*$SecDay) ] = "Cristo Re" ;
   $festa [ strftime("%m%d",$unixUltimaAvvento-21*$SecDay) ] = "1ª 
domenica di Avvento" ;
   $festa [ strftime("%m%d",$unixUltimaAvvento-14*$SecDay) ] = "2ª 
domenica di Avvento" ;
   $festa [ strftime("%m%d",$unixUltimaAvvento-7*$SecDay) ]  = "3ª 
domenica di Avvento" ;
   $festa [ strftime("%m%d",$unixUltimaAvvento) ]            = "4ª 
domenica di Avvento" ;
   $festa [ strftime("%m%d",$unixUltimaAvvento+7*$SecDay) ]  = "Sacra 
Famiglia" ;
   // festivi infrasettimanali fissi non lavorativi
   $festa [ "0101" ] = "Santa Madre di Dio" ;
   $festa [ $anno4 . "0101" ] = 1 ;
   $festa [ "0106" ] = "Epifania" ;
   $festa [ $anno4 . "0106" ] = 1 ;
   $festa [ "0815" ] = "Assunzione B.V.Maria" ;
   $festa [ $anno4 . "0815" ] = 1 ;
   $festa [ "1101" ] = "Tutti i Santi" ;
   $festa [ $anno4 . "1101" ] = 1 ;
   $festa [ "1102" ] = "Commemorazione dei defunti" ;
   // modificata perché potrebbe coincidere con la 2ª domenica di avvento
   $festa [ "1208" ] = "Immacolata Concezione di M.V." . ( 
isset($festa["1208"]) ? " / "  . $festa["1208"] : "" ) ;
   $festa [ $anno4 . "1208" ] = 1 ;
   // modificata perché potrebbe coincidere con la Sacra Famiglia
   $festa [ "1225" ] = "Natale di Gesù" . ( isset($festa["1225"]) ? ( " 
/ " . $festa["1225"] ) : "" ) ;
   $festa [ $anno4 . "1225" ] = 1 ;
   // modificata perché potrebbe coincidere con la Sacra Famiglia
   $festa [ "1226" ] = "Santo Stefano" . ( isset($festa["1226"]) ? ( " / 
" . $festa["1226"] ) : "" ) ;
   $festa [ $anno4 . "1226" ] = 1 ;
   // patrono
   if (isset($PatronoDay))
   {
     $festa [ $PatronoDay ] = ( $festa [ $PatronoDay ] ? $festa [ 
$PatronoDay ] . " / " : "" ) . $Patrono ;
     $festa [ $anno4 . $PatronoDay ] = 1 ;
   }
   return $festa ;
}
function RicorrenzeLaiche ($anno) # e altre menate...
{
   $anno4 = sprintf("%04d",$anno) ;
   $festa [ "0425" ] = "Festa della Liberazione" ;   $festa [ $anno4 . 
"0425" ] = 1 ;
   $festa [ "0501" ] = "Festa dei Lavoratori" ;      $festa [ $anno4 . 
"0501" ] = 1 ;
   $festa [ "0602" ] = "Festa della Repubblica" ;
   $festa [ "1104" ] = "Festa delle Forze Armate" ;
   $festa [ sprintf("03%02d",31 - strftime("%w",mktime 
(12,0,0,3,31,$anno))) ] = "inizio ora legale" ; # ultima domenica marzo
   $festa [ sprintf("10%02d",31 - strftime("%w",mktime 
(12,0,0,10,31,$anno))) ] = "ritorno ora solare" ; # ultima domenica ottobre
   return $festa ;
}
-- 
gpb chiocciola freemail punto it

 
hi G. Paolo,
scusami se non l'ho precisato subito, l'avrei fatto a correzione
avvenuta :)
Se ti ricordi qualche anno fa ne abbiamo parlato a lungo, poi io l'ho
implementata in alcuni miei siti, ma non mi ero mai accorto del
problema.
Grazie per il codice, integrerň nel mio le novitŕ :)
ciao!
Salvo Micciché

 Grazie per il codice, integrerò nel mio le novità :)
Nessuna gelosia, fa solo piacere vedere ricomparire ogni tanto
il proprio codice.
Dopo aver inviato il messaggio ho letto gli altri del thread
e infatti avevo il sospetto che fossi proprio tu quando parlavi
dei santi.
Io invece ho fatto prendere al calendario un'altra strada, nel
senso che, appoggiandomi ad altre tabelle, lo uso anche come
promemoria: posso infatti associare vari eventi ad un determinato
giorno e mi compaiono sul calendario. Poi se avrò voglia farò
in modo che mi avverta "tot" tempo prima via e-mail.
L'ho esteso poi all'ufficio, per cui posso inserire eventi
a livello "personale" (sono per me e li vedo solo io), a livello
di "ufficio" (condivisibile tra i componenti del mio ufficio),
di "sezione" (una sorta di insieme di più uffici) e di "reparto"
(praticamente tutti); per gli ultimi due casi solo alcune persone
possono scrivere, le altre solo leggere.
Tutto questo comunque fa parte dell'applicazione più grande
Cartesio (che trovi sul mio sito in una versione ormai "antica",
appena ho un po' di tempo l'aggiorno sia lì e la metto anche su
sourceforge).
Bye
gp


 sourceforge).
bene, tornerò sul tuo sito a dare un'occhiata a quella, intanto, poi
appena l'aggiornerai scaricherò l'aggiornamento :)
grazie, a presto
ciao!
Salvo Micciché

 appena l'aggiornerai scaricherò l'aggiornamento :) 
Qualora non lo trovassi al volo con google, il sito mio è
http://gpbizzaro.supereva.it/
Comunque quella che c'è lì è veramente vecchia vecchia,
è rimasta praticamente solo la filosofia iniziale del progetto,
che ora ha fatto passi in avanti veramente notevoli.
Quello su cui troverai prima la versione sarà
http://sourceforge.net/projects/cartesio/
dove per ora ho messo solo un piccolo programma di prova
più che altro per imparare a mettere i files su sourceforge.
Comunque in sintesi è un programma per la condivisione di dati
nei laboratori di analisi (dove lavoro io), dove per dati si
intendono anche "documenti", tutti ordinati in appositi
"fascicoli", poi di pubblicazioni tecniche, di "eventi" come
sul calendario, dell'elenco del materiale da analizzare e la
loro posizione e tante altre cosette.
L'elaborazione dei dati di laboratorio è molto varia, si spazia
dal semplice calcolo dei pesi molecolari alla gestione delle
analisi del DNA.
È scritta in php (con qualche programmino di supporto in C)
e si appoggia a un db MySQL. Non fa uso di java, flash e altre
porcherie (parere personale perfettamente non condivisibile),
di javascript e neppure di cookies, pur gestendo tranquillamente
l'autenticazione degli utenti e la differenziazione dei permessi
per ogni operazione.
Dove lavoro hanno speso varie centinaia di milioni delle vecchie
lire per un programma inutilizzato (soldi del cittadino buttati al
vento, sigh!), ma per facilità di utilizzo e portabilità
(basta un browser per utilizzarlo) viene preferito il mio (fatto
da un dilettante a casa nel tempo libero), vuol dire che non è
poi tanto male...
Insomma, per me è un bel progetto e visto che l'ho messo sotto
GPL penso possa essere un bel punto di partenza per analoghi
progetti.
Chiudo che sono già sin troppo OT.
Comunque visto l'interessamento, anche di altri amici, cercherò
di mettere al più presto on line una versione "utilizzabile".
Aspetto sempre perché dico "beh, fammi prima aggiungere questo"
"un attimo che aggiungo quest'altro" e alla fine la versione
di Cartesio che utilizzo sia a casa che in ufficio è anni luce
più avanti di quella sul sito.


 più avanti di quella sul sito.
d'accordo :))
grazie e complimenti!
Avevo solo da chiederti una cosa:
le parti che riguardano inizio e fine dell'ora legale si aggiornano ogni
anno, giusto?
ciao!
Salvo
-- 
#!/usr/bin/perl
print "Mele §alvo©";

 anno, giusto?
Beh, sì, le due righe (che posto di seguito) cercano appunto l'ultima
domenica di marzo e l'ultima domenica di ottobre, che da qualche anno
vengono utilizzate come inizio e fine dell'ora legale.
   $festa [ sprintf("03%02d",31 - strftime("%w",mktime 
(12,0,0,3,31,$anno))) ] = "inizio ora legale" ; # ultima domenica marzo
   $festa [ sprintf("10%02d",31 - strftime("%w",mktime 
(12,0,0,10,31,$anno))) ] = "ritorno ora solare" ; # ultima domenica ottobre
Nota che anche in queste funzioni, per evitare equivoci, ho messo
l'orario alle 12:00 anziché alle 00:00.
Buon lavoro!


 Buon lavoro!
grazie
-- 
<? print "Ciao, e grazie di tutto.\n"; ?>

 Sembra strana la struttura, ma l'importante è che funzioni :)
La funzione del calcolo dell'ultima domenica del mese:
   31 - strftime("%w",mktime (12,0,0,3,31,$anno)
È complicata solo in apparenza.
La funzione:
   strftime("%w",mktime (12,0,0,3,31,$anno)
mi dà il giorno della settimana (chiamiamolo "W")
dell'ultimo giorno di marzo,
da un valore minimo 0 se è domenica
ad un valore di 6 se è sabato.
Se il 31 è domenica
con 31-W (che vale 0) ottengo 31,
se il 31 è lunedì
facendo 31-W (che vale 1) avrei 31-1 ossia 30,
e così via sino al 31 che cade di sabato,
e facendo 31-W (6) ottengo 25.
Bye


 È complicata solo in apparenza.
ottima spiegazione, grazie!
php è meraviglioso anche per questo.
ciao
Salvo
-- 
<?php if (php || perl) { echo "ok! \n"; } ?>