...Personalizza la tua HomePage...
Questa Sezione è Dedicata a Tutti i Webmaster Nofiti e Non
Formattazione e Inserimento Date in Database | ||||
|
||||
Quando si trattano dati in formato data, ci si trova spesso di fronte a problemi di formattazione delle date stesse, sia a livello di visualizzazione nel browser che, soprattutto, a livello di corretto inserimento all'interno di un database. Sia Questo Access o SQL Server. Nel primo caso, il problema, è spesso dovuto al fatto che il server su cui risiede il nostro sito, ha impostazioni americane, per cui le date, se prelevate dal database e inviate al browser, vengono visualizzate nel formato americano mm/gg/aaaa. In questa situazione, se si desidera invece una formattazione "italiana", basta aggiungere all'inizio di ogni pagina ASP, la seguente riga di codice: <% Session.LCID = 1040 %> Sarebbe ancora meglio, inserire tale riga nella Sub Session_OnStart del global.asa. Però alcuni server non permettono di definire la proprietà LCID dell'oggetto Session, per cui, in questo caso, è necessario realizzare una funzione di formattazione. Vediamola: <% 'restituisce la data nel formato italiano standard gg/mm/aaaa Function ItDate(data) ItDate = Day(data)&"/"&Month(data)&"/"&Year(data) End Function %> Questa funzione accetta come paramentro una data in qualsiasi formato, e restituisce la stessa data in formato italiano standard. Ed ecco un esempio del suo utilizzo: <% Dim data data = "2002/08/20" Dim itData itData = ItDate(data) Response.Write("Data iniziale: "&data") Response.Write("...la stessa data in formato italiano standard: "&itData") %> Inserimento data in un database. Il problema dell'inserimento di una data all'interno di un database, spesso tedia un gran numero di programmatori. Cosa intendo per "Tedia", semplicemente che il database ha una sua interpretazione del formato della data mentre il server ne ha un'altra. Anzi il problema non è proprio così semplice ma non mi dilungo oltre. Come database di riferimento, consideriamo MS Access, SQL Server si comporta diversamente. Supponiamo di avere una stringa sql del tipo: <% Dim cn 'apriamo la connessione al database 'Set cn = .... Dim data data = Date() Dim sql sql = "INSERT INTO iscrizioni(ISCRIZIONE) VALUES(#"&data&"#)" cn.Execute(sql) cn.Close() Set cn = Nothing %> In questo frammento di codice, inseriamo la data odierna nel campo ISCRIZIONE della tabella "iscrizioni". Dopo l'inserimento, se andiamo a controllare cosa effettivamente contiene il database, con molta probabilità, vedremo una data in cui il giorno è stato invertito con il mese (se il giorno è maggiore di 12 la data potrebbe invece essere inserita correttamente). Per ovviare a questo problema, ed essere sicuri che la data venga sempre inserita nel database nel formato definito durante la creazione del campo della tabella, è sufficiente effettuare gli inserimenti dopo aver convertito la data nel formato aaaa/mm/gg o aaaa-mm-gg. Ecco la funzione di conversione, e un suo possibile utilizzo, considerando l'esempio appena visto: <% 'restituisce la data nel formato aaaa/mm/gg per l'inserimento in database Function FormatDateForDB(data) FormatDateForDB = Year(data)&"/"&Month(data)&"/"&Day(data) End Function Dim cn 'apriamo la connessione al database 'Set cn = .... Dim data data = Date() data = FormatDateForDB(data) Dim sql sql = "INSERT INTO iscrizioni(ISCRIZIONE) VALUES(#"&data&"#)" cn.Execute(sql) cn.Close() Set cn = Nothing %> Dato che gli inserimenti di date in database, spesso coinvolgono la data relativa al momento stesso dell'inserimento, potrebbe essere comodo generalizzare la funzione appena vista in modo tale che, se il parametro data dovesse essere vuoto, la data restituita sia quella odierna. Una nota merita anche l'inserimento di date nel caso si utilizzi MS SQL Server come database. Questo RDBMS accetta le date solo nei formati: aaaammgg oppure aaaa-mm-gg. Formattazione data e ora del server nel formato Venerdì, 24 maggio 2002 10:04:58 AM. L'ora dipende dalle impostazioni del server. <% myDate=Date() GiornoSett= WeekdayName (Weekday(myDate)) UpGiornoSett=UCase( Left (GiornoSett,1)) & Mid (GiornoSett,2) Response.Write ("<b><font size='1' color='Blue' face='Verdana'>") Response.Write (UpGiornoSett & ", " & Day(myDate) & " " & MonthName (Month ( myDate)) & " " & Year(myDate)) Response.Write ("</font></b>") Response.Write ("<b><font size='1' color='green' face='Verdana'>") Response.Write (" <label id='myora'></label>") Response.Write ("</font></b>") %> |