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

Premetto che sono su Aruba.
Salve ho problema con il forum pubblicato sul sito. In pratica fino a ieri
30-09 il forum ordinava correttamente i post e la data con cui venivano
pubblicati era nel formato GG-MM-AAAA. Oggi primo ottobre mi ritrovo con i
post scritti in MM-GG-AAAA e che il forum stesso interpetra come messaggio
del 10 gennaio.
Mi hanno consigliato di metterci il segiente codice session.LCID = 1040 che
ho inserito, ma continua a ripresentarsi il problema.
Qualcuno ha qualche idea?

aha...@despammed.com
 scrive...

Se sfogli fisicamente il db, che date leggi?
Perchè ho l'impressione che in realtà le date le inserisca al 
contrario. Il tuo sito (ti conosco...) è stato pubblicato da poco, e il 
problema nasce oggi che è il 1/10 e questo mi darebbe ragione.
Allora... Access lavora in modo "strano" sulle date.
Se gli inserisci una data con
GIORNO 02
MESE 29
ANNO 2003
Lui capisce che è impossibile (mese 29...) ma NON ritorna errore: 
cappota mese con giorno e inserisce.
Quindi l'idea è che tu a IERI gli hai fornito le date al contrario 
mese/giorno (o almeno lui le ha interpretate/inserite così).
Oggi, che è 
GIORNO 1
MESE 10
Lui ha preso
GIORNO 10
MESE 1
E ha, ovviamente, ritenuto necessario cappottare giorno e mese.
SOLUZIONE:
A) modifica lo script, prova a dargli le date al contrario.
B) Se si tratta di mettere la data corrente, lascia che sia access ad 
arrangiarsi, con la sua funzione date() (la stessa di ASP):
INSERT INTO tabella(campodata) VALUES(Date())

Questo è il file post.asp (credo dipenda da questo file il problema con le
date)
Il file config.inc e 
utilities.in
 non contengono riferimenti alla gestione
delle date
Il campo nel database dove vengono registrate le date si chiama
"date_posted"
<%Option Explicit%>
<!--#include file="config.inc" -->
<!--#include file="utilities.inc" -->
<%
'declare and set variables
   Dim postData(4), ParentID
   postData(0) = Request("topic")
   postData(1) = Request("author")
   postData(2) = Request("email")
   postData(3) = Request("body")
   ParentID = Request("parentID")
   Dim i
   Dim dbConn, dbRS
   Dim ReplyCount
'validate data
   If postData(0) = "" And C_Req_Topic = "Yes" Then RaiseError "Please enter
a topic"
   If postData(1) = "" And C_Req_Name = "Yes" Then RaiseError "Please enter
your name or alias"
   If postData(2) = "" And C_Req_Email = "Yes" Then RaiseError "Please enter
your email address"
   If postData(3) = "" And C_Req_Body = "Yes" Then RaiseError "Please
complete the body of the message"
   Sub RaiseError(ErrorMsg)
     Dim RedirURL
     RedirURL = "newtopic.asp?"
     RedirURL = RedirURL & "topic=" & Server.URLEncode(postData(0)) & "&"
     RedirURL = RedirURL & "author=" & Server.URLEncode(postData(1)) & "&"
     RedirURL = RedirURL & "email=" & Server.URLEncode(postData(2)) & "&"
     RedirURL = RedirURL & "body=" & Server.URLEncode(postData(3)) & "&"
     RedirURL = RedirURL & "parentID=" & ParentID & "&"
     RedirURL = RedirURL & "error=yes&"
     RedirURL = RedirURL & "errormsg=" & Server.URLEncode(ErrorMsg)
     Response.Redirect RedirURL
   End Sub
'open a connection to the database
   Set dbConn = Server.CreateObject("ADODB.Connection")
   dbConn.Open C_dbConnect
'convert then enter the topic information into the db
   For i = 0 To 3
     postData(i) = web2db(postData(i))
   Next
   postData(3) = Replace(postData(3), vbCrLf, "<br>" & vbCrLf)
   dbConn.Execute "INSERT INTO board1
(topic,author,email,body,parentID,date_posted) VALUES ('" & postData(0)  &
"','" & postData(1) & "','" & postData(2) & "','" & postData(3) & "'," &
ParentID & ",#" & Now & "#)"
'update the reply count of the original post (if not an original post)
   If Not ParentID = 0 Then
     Set dbRS = dbConn.Execute("SELECT replies FROM board1 WHERE ID = " &
ParentID)
     ReplyCount = CInt(dbRS("replies"))
     ReplyCount = ReplyCount + 1
     Set dbRS = Nothing
     dbConn.Execute "UPDATE board1 SET replies = " & ReplyCount & " WHERE ID
= " & ParentID
   End If
'clear db connection from memory
   Set dbConn = Nothing
'redirect to confirmation message
   Response.Redirect "message.asp?title=" & _
     Server.URLEncode("Message Posted") & "&message=" & _
     Server.URLEncode("<b>Thank you</b>, your message was posted
successfuly.")
%>

Problema vecchio, risolto n-mila volte in mille salse.
La mia "salsa" è:
taglia la testa al toro: usa date ANSI: AAAA/MM/GG e vai tranquillo :-)
-- 
___________________________________________________________
a p bertolini
"Se Dio è perfetto, perché ha creato le funzioni discontinue?"
#ICQ: 10681264
(
www.webwarrior.org
)

Altre info utili alla risoluzione del problema.
Nel database le date sono scritte in GGMMAAAA fino al 30-9. Da oggi le date
vengono registrate come MMGGAAAA.
Il forum su questo sito l'ho pubblicato il 10 settembre e ricordo che questo
problema già si presentava. Poi una mattina (intorno al 12 o 13 settembre)
accesi il computer e notai che le date venivano registrate nel modo
corretto.
Grazie

> Premetto che sono su Aruba.
Questa volta non centra! ;)

Il problema non sta nell'LCID ma nel modo in cui hai memorizzato la data
finora. Access memorizza le date (e accetta) nel formato mm/gg/aaaa, però è
in grado di convertirle automaticamente nel caso il primo parametro "mm" non
può essere considerato il mese (numero > 12).
In poche parole (ed è anche quello che è successo nel tuo caso), se tu
inserisci la data nel formato 13/09/2003, Access 'capisce' che il primo
numero è il giorno (non potendoci essere un mese con il numero '13') e la
converte nel suo formato "09/13/2003". Nel caso del primo ottebre, invece,
tu inserisci la data in questo modo "01/10/2003", e Access, leggendolo nel
suo formato "mm/gg/aaaa", pensa che questa data sia il 10 gennaio.
La soluzione, come avrai capito, è convertire qualsiasi data prima
dell'inserimento nel formato corretto "mm/gg/aaaa". Semplice, no? :)
Ciao
--
AZ [Microsoft .NET MVP]

 ParentID & ",#" & Now & "#)"
L'ultima riga diventa:
ParentID & ", now())"
Usando la funzione now() DIRETTAMENTE IN ACCESS, e non più da ASP 
passare ad access la data/ora, sei tranquillo che la data sarà SEMPRE 
corretta. E ASP fa anche un calcolo in meno.
Naturalmente, in ACCESS (quantomeno, in access2000... nelle versioni 
precedenti, non so). In altri database, la funzione potrebbe avere 
altro nome. In SQLserver, ad esempio, si usa GETDATE().