Newsgroup: it.comp.www.php
Titolo: Mysql ricerca per data

Problema n.1
Dovrei ricercare delle pratiche passando i parametri "dal", "al" in un
campo "date", una cosa tipo:
select * from pratiche where data_apertura (dal 01-01-2004 al 01-01-2005)
########
Problema n.2
da una form con campo "data_apertura" c'è una funzione che mi preleva
qualsiasi formato inserito in stile EUR tipo "28-03-2005" o "28/03/2005" e
me lo "raddrizza" in formato DB "2005-03-28" senza dover spezzettare i 3
campi "giorno, mese, anno" e raddrizzarli dall'altraparte?  

 dall'altraparte?
Nessuna funzione standard di PHP.
-- 
I am what I am, I do what I can
ository.biz/go/3E
Do. Or do not. There is not try.

work ha scritto:

Guarda se ti può essere utile questa funzioncina che avevo scritto
tempo fa. Gli passi (in $miadata) la data che l'utente mette nel form
e il formato in cui vuoi che la restituisca (in $formato), quindi puoi
utilizzarla, ad esempio, così:
   if ($dat=GetInputDate($_POST["Filter_InizioDal"],"Ymd"))
     { $queryWhere = $queryWhere . " and FT_Pratica.Inizio>='$dat'" }
Mi raccomando gli apici per la data nella query, e metti 
anno-mese-giorno ("Ymd") nell'esempio se vuoi andare tranquillo.
Questo con MySQL, con altri DB non so.
L'utente può inserire giorno/mese/anno separandoli con on "/", ".",
"-" e " "; se ometti l'anno prende quello corrente, così pure se ometti
il mese. Il mese lo puoi esprimere sia in numeri sia in lettere, anche
se vengono controllate solo le prime tre lettere sia in italiano che in
inglese. puoi anche inserire la data odierna mettendo solo "o" (oggi)
oppure "t" (today).
La uso ormai da anni nei miei programmi (che non uso solo io)
e per quello che mi riguarda ormai è ultracollaudata.
Bye
GP
= = = = = = = = = = = = =
function GetInputDate($miadata,$formato)
{
   $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));
   setlocale(LC_TIME,"it_IT");
   $dataoggi =  time();
   // verifica anno
   if (isset($anno))
   {
     $anno = abs($anno) % 10000 ; // così ho da 0 a 9999
     if ($anno <= 9)
     {
       $anno += 2000;
     }
     elseif ($anno <= 99)
     {
       $anno += 1900;
     }
   }
   else
   {
     $anno = date ("Y",$dataoggi) * 1;
   }
   // verifica mese
   if (isset($mese))
   {
     if (($mese<1) || ($mese>12))
     {
       $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 "";
   // da cambiare poiché legata al limite 1970-2037
   return date($formato,mktime(0,0,0,$mese,$giorno,$anno,0));
}

 campi "giorno, mese, anno" e raddrizzarli dall'altraparte?
una sola no, ma se fai una combo...
http://it.php.net/strftime
http://it.php.net/strtotime
leggi gli esempi e le note degli utenti
-- 
"So, I never went back to work for Lieutenant Dan.
Though he did take care of my Bubba-Gump money.
He got me invested in some kind of fruit company"

 utilizzarla, ad esempio, così:
pensavo più ad una cosa tipo:
$data_passed = date("d/m/Y");  #data proveniente dalla form
				#uso quella locale per il test
function convertiData($data, $nomedata){
$europea = explode ('/',$data);               #faccio un explode
$americana = array_reverse($europea);	      #ribalto l'array
$nomedata = implode('-', $americana);         #faccio un implode
echo "$nomedata";			#stampo a video il risultato
					#per il test
}
convertidata($data_passed, miadata);
il problema nasce se la segretaria scrive "28-03-2005"

work wrote:

usa una regex..
-- 
www.iuz-lab.info

 usa una regex..
Si, a questo ci avevo pensato ma le segretarie sono diaboliche..
28/03/2005
28-03-2005
28 marzo 2005
28 03 05
28-03-05
28/03/05
28 marzo 05
28-marzo-05
se ci fosse la funzione bella e pronta..

work wrote:

per me un avviso del tipo GG MM YYYY un controllo con una regex e ed
eventuale messaggio di errore sarebbero piu' che adeguate..
cmq prova tu a costruirla..
devi suddividere la stringa in una sequenza di numeri e il carattere
separatore sara' qualsiasi cosa diverso da una lettera od un numero..
assumi che l'anno vada sempre in fondo..
se il primo od il secondo valore e' una stringa e corrisponde ad un mese
sara' il mese etc, altrimenti ritorni data non valida..
se primo e secondo valore sono numeri ed uno e' piu' grande di 12,
quest'ultimo sara' il giorno e l'altro il mese altrimenti ritorni data non
comprensibile..
ma consiglio vivamente la prima soluzione..
-- 
www.iuz-lab.info

 se ci fosse la funzione bella e pronta..
Infatti la funzione che ti ho postato cerca di essere a prova
di segretaria diabolica e interpreta TUTTE le date che hai scritto,
e anche:
  15 apri 5   => 15/04/2005 (nome del mese anche parziale)
  14 march    => 14/03/2005 (omesso anno => anno corrente)
  3           => 03/04/2005 (omessi anni e mese prende i correnti)
  4.3         => 04/03/2005 (anche come separatore il punto)
  ecc.ecc.
Insomma ti basta fare copia/incolla. Provala.
Bye
GP