Newsgroup: it.comp.www.php
Titolo: La funzione mktime sballa dopo il 30 settembre?

Salve questa mattina mi sono accorto, guardando un grafico delle
statistiche di accesso al mio sito , realizzato con un mio script, e che
potete osservare in questa pagina:
http://www.teachingonline.it/script/statistiche2.php
che dopo il giorno 30 sett 2005, le date sono sballate di 2 gioni in
avanti. In effetti, il 30 settembre è venerdi, il 5 giorno della
settimana, e quindi, automaticamente, il 1 ottobre dovrebbe essere
sabato, il 6 giorno della settimana, e cosi' via. Invece, dopo il 3o
settembre, il gioreno successivo viene considerato il 3 giorno della
settimana, e cosi' via. Ecco il codice che recupera il giono della
settimana:
$data=$record['Data_Visita'];  // prendo la data della visita al sito da
una tabella MySql
$anno=substr($data,1,4);
$mese=substr($data,6,2);
$giorno=substr($data,8,2);
$utime = mktime (0,0,0, $mese,$giorno,$anno,-1);
$weekday=date('w',$utime);
if ($weekday==0)
$weekday=7;
echo $weekday;
Il codice ha sempre funzionato, prima di quella data, ma ora non capisco
perche' mi da dei dati cosi' sballati.
Francesco
-- 
      Teaching OnLine 
Corsi online di programmazione
Php, Asp, C, C++, Visual Basic, Delphi
Linux Shell Programming
------------------------------------
http://www.teachingonline.it

una tabella MySql
questa data è corretta?
Francesco Mazzi
Webmaster di AltroPC.it - 
http://www.altropc.it
 
Dev.Staff di E-Xoopport - 
http://dev.e-xoopport.it

 $giorno=substr($data,8,2);
la funzione substr inizia dall'indice 0,
quindi se la data ritornata da mysql fosse 2005-10-05
con il tuo metodo ($anno=substr($data,1,4);) otterresti la stringa
$anno='005-' perdendo il primo carattere e così via anche nel mese (il
giorno è corretto).
Prima ti funzionava perchè in qualche modo riusciva ugualmente a
parserizzare la data.
Usa
$anno=substr($data,0,4);
$mese=substr($data,5,2);
$giorno=substr($data,8,2);
Ciao
Giuseppe

 Giuseppe
Ho provato, non cambia niente, il risultato è lo stesso. E poi il
comportamento anomalo si presenta solo dopo il 30 settembre. L'anno non
c'entra.


 Ho provato, non cambia niente, il risultato č lo stesso.
<?php
$data = '2005-09-30';
$anno = substr($data, 0, 4);
$mese = substr($data, 5, 2);
$giorno = substr($data, 8, 2);
$utime = mktime (0, 0, 0, $mese, $giorno, $anno, -1);
print(date('d/m/Y', $utime));
?>
Se nelle righe sopra provi a sostiutire la data del 30 settembre
con, per esempio, 2005-10-06, la data restituita č sempre
corretta.
Poi nelle righe in cui calcoli l'anno e il mese sostituisci
rispettivamente lo 0 con 1 e il 5 con un 6 (ossia metti i
parametri cosě come li avevi messi te) e poi riprova prima con il
30 settmbre e poi con una qualunque data di ottobre (o quella che
vuoi te, purché abbia il mese con due cifre). 
Nel secondo caso, a causa dell'errore nei parametri, con la data
di ottobre viene restituita una data sbagliata. Questo perché, a
causa dei parametri errati, a mktime passi solo la seconda cifra
del mese (oltre a un formato dell'anno non corretto). Fintanto
che la prima cifra del mese era 0, mktime riusciva ancora a
calcolare la data corretta, ma da ottobre a dicembre non piů
perché gli passi un mese errato.
Ciao.
-- 
Long John

SI, hai ragione, ora funziona, avevo dimenticato di portare il 6 a 5. E'
stata una mia svista.
Grazie per l'aiuto, sei stato gentilissimo.
