Newsgroup: it.comp.www.php
Titolo: Re: Formato date

 daniele
--
www.iuz-lab.info

 ingresso...
Sì, effettivamente tale funzione l'avevo scritta solo per gestire date
"attuali", e può essere utilizzata solo per anni tra il 1970 e il 20??.
Pensavo infatti di migliorarla appena trovo -sigh!- un po' di tempo...
gpb
-- 
gpb chiocciola freemail punto it

G.Paolo Bizzaro wrote:

postala al completo.. guardo se ce la faccio io entro stanotte..
 
--
www.iuz-lab.info

 postala al completo.. guardo se ce la faccio io entro stanotte..
La dipendenza dal "1970" è nelle ultime due righe che usavo
per testare la correttezza delle date e per restituirla nel
formato richiesto.
   if (!checkdate($mese,$giorno,$anno))  return "";
   return date($formato,mktime(0,0,0,$mese,$giorno,$anno,0));
Non facendo il check, e se il formato che ti serve è sempre il
medesimo (ad esempio 2004-06-23 per la data di oggi, formato
utilizzato per le date da MySQL) con un opportuno
printf di $giorno $mese $anno risolvi il problema...
Ah, dimenticavo: anche per il DB c'è da verificare che venga
utilizzato un formato "data" che supporti le date anteriori
al 1970.
Bye
gp


> postala al completo.. guardo se ce la faccio io entro stanotte..
Ho visto che checkdate non aveva problemi prima del 1970,
per cui è bastato modificare la riga contenente mktime
(più qualche altra minima modifica). Ho scelto però di avere
il solo formato YYYYMMDD (di MySQL) come output, così da
poterlo utilizzare direttamente per le query.
Segue codice.
Bye
gp
function GetMyDate($miadata) // output nel formato MySQL YYYYMMDD
{
   $arrayMese = 
array("gen","feb","mar","apr","mag","giu","lug","ago","set","ott","nov","dic",
 
"jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec");
   $dimArrayMese = sizeof($arrayMese);
   list ($giorno,$mese,$anno) = split("[\ /.-]", trim($miadata));
   $dataoggi =  time();
   // verifica anno
   if (isset($anno))
   {
     $anno = abs($anno) % 10000 ; // così ho da 0 a 9999
     if ($anno <= 9) // 0..9 -> 2000..2009
     {
       $anno += 2000;
     }
     elseif ($anno <= 99) // 10..99 -> 1910..1999
     {
       $anno += 1900;
     }
   }
   else
   {
     $anno = date ("Y",$dataoggi) * 1;
   }
   // verifica mese
   if (isset($mese))
   {
     if (($mese<1) || ($mese>12)) // se non è numero provo in lettere
     {
       $mese = substr(strtolower($mese) . "   ",0,3);
       for ($i = 0 ; $i < $dimArrayMese ; $i++)
       {
         if ($mese == $arrayMese[$i])
         {
           $mese = $i % 12 + 1 ;  break;
         }
       }
       if ($i==$dimArrayMese)
       {
         return "" ;  // NON VALIDO
       }
     }
   }
   else
   {
     $mese = date ("m",$dataoggi) * 1;
   }
   if ( ($giorno=="o") || ($giorno == "O") || ($giorno == "t") || 
($giorno == "T"))
   {
     $giorno = date ("d",$dataoggi) * 1;
   }
   // verifica giorno (banale, il resto farà checkdate)
   if (($giorno<1) || ($giorno>31)) return "" ;
   if (!checkdate($mese,$giorno,$anno))  return "";
   return sprintf("%04d%02d%02d",$anno,$mese,$giorno);


 
questa funzione accetta date nel formato gg/mm/aaaa, le restituisce nel
formato aaaammaa e le testa per il calendario gregoriano.. se non sono
valide restituisce false
function valid_date($data){
$data = split('/', $data);
$tmp = $data[2];
while($tmp<=1970) $tmp += 28;
if(checkdate($data[1],$data[0],$tmp))
    return($data[2] . date('md',mktime(0,0,0,$data[1],$data[0],$tmp)));
return(FALSE);
}
--
www.iuz-lab.info