Newsgroup: it.comp.www.asp
Titolo: Data sbagaliata

Perche' se scrivo 31 febbraio 2001 mi ritrovo il 3 marzo 2001 anziche' un
bell'errore come nella piu' sana tradizione di visual basic/VBA?
A 'sto punto me lo devo fare a manina il controllo anziche' intercettare
l'errore?
Saluti.
Luciano

A me da invece un bell'errore "Data non valida".  E cDate fallisce.
Usando IsDate, si controlla benissimo.
<%
strMiaData=request.form("Data")
If IsDate(strMiaData) then
   Response.write FormatDateTime(strMiaData,1) & "<BR>"
else
   Response.write "Mi dispiace, ma " & strMiaData & " non è una data
valida!<BR>"
end if
%>
Ciao!
Paolo

 Usando IsDate, si controlla benissimo.
Sia sul mio server che sul sito del provider non viene generato alcun errore
ma viene incrementato il giorno come dicevo.
Ho fatto alcune prove, 
http://www.telemata.it/prove/provadate.asp
 , se ti va
dagli un'occhiata, c'e' anche isdate() che da true.
Fra l'altro ho anche un problema nel passare la variabile con la data ad un
stringa sql (che esige il formato mm/gg/aaaa).
Mentre sul mio server (W2K inglese, IIS inglese, formato date americano) e'
tutto liscio, dal provider (che immagino abbia impostato il formato
italiano) viene invertito il mese con il giorno (ovviamente solo se il
giorno e' <13, Access non e' scemo!:-)).
In Access il trucco e' forzare il formato in questo modo:
"SELECT blabla WHERE data = #"  & Format$ (miadata,"mm/gg/aaaa") & "#"
Ma in vbscript?
Format$() non esiste e FormatDateTime() serve ad altro.
Insomma....non riesco a gestire come si deve 'ste date nell'SQL! Chi mi da
la dritta?:-)
Saluti.
Luciano

 Usando IsDate, si controlla benissimo.
Sia sul mio server che sul sito del provider non viene generato alcun errore


Ti conviene lavorare sulle date sempre nello stesso formato, ad es.
gg/mm/aaaa.
L'es. corrisponde al formato italiano come da te già notato. Su ogni pagina
occorre anteporre alle istruzioni:
    Session.LCID = 1040 ' per l'Italia
    Session.LCID = 2048 ' per gli US
Tieni poi presente che l'SQL lavora sulle date anche in formato esteso, ad
es.:
01/01/2001 diventa 01-gen-2001.
A buon intenditor... ;-)
Ciao,
    Filippo Di Blasi 
filippo...@puntoinformatico.it
    Webmaster(at) 
www.puntoinformatico.it


 Luciano
Io uso questa funzione.
Devo però prima assicurarmi che il parametro data sia nel formato
internazionale
corretto, altrimenti anche datepart fa come gli pare.
'///////////////////////////////////////////////////////////////////////////
'// FormatCTUDate
'// Restituisce una data nel formato usato in SQL
'///////////////////////////////////////////////////////////////////////////
function FormatSQLDate(data)
  if IsDate(data) then
     FormatSQLDate = DatePart("m", data) & "/" & _
                DatePart("d", data) & "/"_
                DatePart("yyyy", data)
  else
     FormatSQLDate=""
  end if
end function
Ciao!
Paolo

                 DatePart("yyyy", data)
Si, e' la prima cosa che ho pensato...pero' mi sa un po' di pezza percio'
volevo vedere se c'era qualcosa di piu' pulito.
Hai visto quella paginetta asp con isadate() che ti dicevo?
Saluti.
Luciano

 A buon intenditor... ;-)
Si, ed infatti ho fatto cosi'! Ma non ha funzionato!:-)
Saluti.
Luciano

 Saluti.
Sì, ci sono passato appena ho visto il tuo messaggio (purtroppo ieri le news
a me funzionavano piuttosto male). Francamente è strano che non dia errori.
Comunque poichè DateSerial restituisce i numeri di giorni trascorsi da (non
mi ricordo) è giusto che 31/02 lo faccia diventare 2 di marzo.
Questo script può sembrare una pezza? Pensavo anch'io così ed invece no, per
cui questa funzione è diventata parte integrante della mia libreria di
routines, sia qui che in Acc. (dove, si pone lo stesso problema).
Dato che:
  1. converte nel formato delle date SQL indipendentemente
     dalle impostazioni internazionali.
  2. Con una piccola modifica, converte nel formato date
     CTU usato da Index Server "yy/mm/aa" (etvoilà con gli standard!)
  3. Funziona sempre e quindi è a prova di manomissioni del server.
L'unica accortezza è che prima di usarla bisogna istruire VBscript sulla
impostazione internazionale da usare. Questa è fondamentale per DatePart.
Se vuoi, puoi postare (o inviare direttamente) lo script, così lo provo.
Quello postato da me l'hai provato? Non è che hai il gestore degli errori
attivato e quindi lo script non si blocca ma continua?
Comunque non solo in ASP ci sono cose strane. Per MySql in questi giorni c'è
un putiferio sulle funzioni di arrotondamento.
E poi il codice "pulito" ed "elegante" è un utopia, specie in linguaggio più
complicati.
Oppure vedila dal lato positivo: definita la funzione la usi come
FormatSQLDate(miadata) e ti dimentichi cosa c'è dentro!
Ciao!
Paolo

 Si, ed infatti ho fatto cosi'! Ma non ha funzionato!:-)
Certo, perché non avendo settato il Session.LCID giusto month() e day() sono
invertiti!
