Newsgroup: it.comp.www.asp
Titolo: Problemi con le date ...

Vorrei sapere se qualcuno puņ aiutarmi in questo ...
All'interno di un database ho inserito un campo data in cifre Es. 01/02/2001
Quando tramite asp vado a modificare questo campo tutte le volte mi inverte
la data ...
Esempio data 01/02/2001 lui me la mette 02/01/2001 se poi rifaccio modifica
lui me la rimette giusta ...
Ho provato anche con il formatdate ma niente ...
Qualcuno potrebbe aiutarmi ?
Grazie

 Qualcuno potrebbe aiutarmi ?
Forse il server ha le impostazioni americane e inverte il giorno con il
mese. Prova a recuperare il nome del mese e vedi se te lo da comunque
giusto.
Saluti.
Luciano

 Vorrei sapere se qualcuno può aiutarmi in questo ...


 ng cosi' magari torna utile anche ad altri )
Posta, posta, a me è utile!
Spiegazioni dettagliate a prova di utonto, per cortesia :-))
Fred

 la data ...
Il fatto e' che quel numero (il "date serial") quando lo devi visualizzare
va convertito (in automatico o manualmente) in una stringa. Se tu lasci fare
al sistema, avra' il solito problema delle date perche' noi ragioniamo nel
formato GG/MM/AAAA mentre il sistema (il jet engine in questo caso) in
MM/GG/AAAA. Quindi la soluzione piu' generica possibile e' quella che adotto
anche io, ossia creare almeno due funzioni: una, che ho chiamato
"Date2StringDMY", che converte una data (ossia il valore "numerico" del
dateserial) in una stringa GG/MM/AAAA ed un'altra, "DateDMSwap", che
converte una stringa GG/MM/AAAA in MM/GG/AAAA invertendo giorno e mese
(utile per fare gli update/insert tramite SQL).
In questo modo quando leggi dal DB e vuoi mostrare una data usi
Date2StringDMY, e quando leggi un valore GG/MM/AAAA da una form e lo devi
mettere nel DB usi "DateDMSwap".
Ecco le due funzioni:
Function Date2StringDMY(Data)
    On Error Resume Next
    Date2StringDMY = Right("0" & Day(Data),2) & "/" & Right("0" &
Month(Data),2) & "/" & Year(Data)
End Function
Function DateDMSwap(Stringa)
    ' Inverte le prime due parti di una stringa-data
    DateDMSwap = Mid(Stringa,4,2) & "/" & Left(Stringa,2) & "/" &
Mid(Stringa,7)
End Function
Spero ti possano essere utili.
Ciao!
--
   Alex Palmese
--- Per scrivermi elimina "LOSPAM" dall'indirizzo ---
Sei anche tu stanco dei messaggi spam? Usa Terminator, il programma
anti-spam italiano FREEWARE! 
http://www.sertel.net/terminator/


Dunque, un modo puo' essere quello si trasformare le date in numero intero e
immetterle cosi' nel db.
In questo modo si aggirano ( e risolvono ) tutti i problemi legati
all'interpretazine della data che si verificano in fase di immissione ( date
ceh diventano in formato americano a partire dal 12 di ogni mese ecc ecc).
Se "numerizzi " le date hai questo vantaggio: puoi fare comunque calcoli di
tempo intercorso, confronti e ricerche nel db.
Se per esempio cerchi tutti i record creati il 10 aprile 2001 la tua data
"numerizzata" e' 20010410 se cerchi.
Se devi fare delle sottrazioni o addizioni di giorni ( del tipo : "estrai
dal db tutti i record che sono stati creati  tre giorni dopo quelli che al
campo X hanno "kilo") ti conviene estrarre le date in formato numerico e
convertirle in date, fare poi tutti i confronti e calcoli sulle date
 altrimenti ti troveresti con date del tipo 99/04/2001 !!!)
Insomma, di seguito posto il codice
Function datizza(str)
    If Len(str) = 8 Then
        str = Mid(str, 7) & "/" & Mid(str, 5, 2) & "/" & Mid(str, 1, 4)
    Else
       str=01/01/1900 ' valore di default qualora la data non si presenta
nel formato idoneo, ma e' chiaro che puoi gestire questa
                                'eventuallita' come meglio credi
    End If
End Function
Function numerizza(dataD) ' da una data 05/12/2001 lo trasforma un un numero
20011205
 DIM giornoL, meseL, annoL, dataL
 IF Len(dataD)=10 THEN
   data=cstr(dataD)
   giornoL=MID(dataD,1,2) ' individuo i caratteri relativi al giorno con la
funzione mid ossia dalla stringa "dataD" parto dala
                                            ' posizione 1 e prendo i primi 2
caratteri
   meseL=MID(dataD,4,2)    ' stessa cosa faccio per il mese
   annoL=MID(dataD,7,4)     'estraggo l'anno: ovviamente si spera che sia
fatto di 4 cifre, altrimenti ti conviene gestire i casi in
                                            'cui trovi 01 (e allora vuol
dire che ti trovi nel nuovo millennio e devi aggiungere "20" per
                                             'comporre il 2001 o altrimenti
"19")
   dataD=annoL&meseL&giornoL     ' infine componi il numero intero
END IF
END FUNCTION
Spero di esserti stato di aiuto.
Assalam Alaikum
se quindi vuoi immettere nel db