Avatar billede cermitto Nybegynder
19. april 2006 - 14:45 Der er 64 kommentarer

Tid og dato med ASP

Hvordan trækker jeg feks. 1 dag fra et tidsformat på.
2006-02-02 12:05 ?
Avatar billede mitbrugernavn Praktikant
19. april 2006 - 14:51 #1
<%
dagsdato = now()
gaarsdato = DateAdd("d", -1, dagsdato)
response.write gaarsdato
%>
Avatar billede fennec Nybegynder
19. april 2006 - 14:51 #2
dinDato = now()
nyDato = dateadd("d",-1,dinDato)
Avatar billede mitbrugernavn Praktikant
19. april 2006 - 14:51 #3
<%
dagsdato = now() ' eller dagsdato = request("dindatoform")
gaarsdato = DateAdd("d", -1, dagsdato)
response.write gaarsdato
%>
Avatar billede fennec Nybegynder
19. april 2006 - 14:52 #4
Tja... 3 sek for sent :o)
Avatar billede cermitto Nybegynder
19. april 2006 - 15:08 #5
Undskyld, jeg glemte at nævne. formatet er et tekst format og trækket ud af databasen som: 2006-02-02 12:05

Kan jeg så sige:
Set rs = Conn.Execute("Select * FROM bruger where dato = '" & doMysqlDateTime() & "' - DateAdd("d", -1, dagsdato)")
Avatar billede fennec Nybegynder
19. april 2006 - 15:17 #6
A hvad??? Det fattede jeg ikke meget af :o)

Hvad er det lige du vil med den SQL-sætning?? Og hvad gør doMysqlDateTime() funktionen???
Avatar billede cermitto Nybegynder
19. april 2006 - 15:22 #7
Jeg skriver tiden ind i en database tabel (varchar) med Function:

Function doMysqlDateTime ()
dtDateTime = Now()
dtDateTime = DatePart("YYYY", dtDateTime) & "-" & DatePart("M", dtDateTime) & "-" & DatePart("D", dtDateTime) & " " & DatePart("H", dtDateTime) & ":" & DatePart("N", dtDateTime) & ":" & DatePart("S", dtDateTime)

doMysqlDateTime = dtDateTime
End Function

I udtrækket skal jeg kun have brugerne der er nyere end 1 dag.
Derfor skal jeg have trukket 1 dag fra min '" & doMysqlDateTime() & "'
Avatar billede mitbrugernavn Praktikant
19. april 2006 - 15:23 #8
dagsdato = "2006-02-02 12:05"
'cdate(dagsdato) læser dagsdato som år md dag

gaarsdato = DateAdd("d", -1, cdate(dagsdato))
response.write gaarsdato
Avatar billede cermitto Nybegynder
19. april 2006 - 15:29 #9
Så burde det her jo virke ikk? det gør det bare ikke.

Function doMysqlDateTime ()
dtDateTime = Now()
dtDateTime = DatePart("YYYY", dtDateTime) & "-" & DatePart("M", dtDateTime) & "-" & DatePart("D", dtDateTime) & " " & DatePart("H", dtDateTime) & ":" & DatePart("N", dtDateTime) & ":" & DatePart("S", dtDateTime)

doMysqlDateTime = dtDateTime
End Function
dagsdato = doMysqlDateTime()

Set rs = Conn.Execute("Select * FROM bruger where dato <= DateAdd("d", -1, cdate(dagsdato)) ")
Avatar billede mitbrugernavn Praktikant
19. april 2006 - 15:39 #10
Function doMysqlDateTime ()
dtDateTime = DateAdd("d", -1, now())
dtDateTime = DatePart("YYYY", dtDateTime) & "-" & DatePart("M", dtDateTime) & "-" & DatePart("D", dtDateTime) & " " & DatePart("H", dtDateTime) & ":" & DatePart("N", dtDateTime) & ":" & DatePart("S", dtDateTime)

doMysqlDateTime = dtDateTime
End Function
Select * FROM bruger where dato <= doMysqlDateTime "
Avatar billede cermitto Nybegynder
19. april 2006 - 15:40 #11
Min fejl, glemte et komma.

Resultatet jeg får ud skreves således 18-04-2006 15:38:00
Men for at sammenligne med formatet 2006-02-02 12:05 skal sekunderne nok fjernes, kan man det?
Avatar billede fennec Nybegynder
19. april 2006 - 15:41 #12
Du har jo mulighed for at gøre bruge af MySQL's indbygget funktioner, men det skaber problemer hvis du skifter database på et senere tidspunkt:

Set rs = Conn.Execute("Select * FROM bruger where dato <= date() ")

og med DATE_ADD funktionen:
Set rs = Conn.Execute("Select * FROM bruger where dato <= DATE_ADD(date(), INTERVAL -1 DAY)")

Så er du helt uden om formateringsproblemet :o)
Avatar billede mitbrugernavn Praktikant
19. april 2006 - 15:50 #13
Function doMysqlDateTime ()
dtDateTime = DateAdd("d", -1, now())
dtDateTime = DatePart("YYYY", dtDateTime) & "-" & DatePart("M", dtDateTime) & "-" & DatePart("D", dtDateTime) & " " & DatePart("H", dtDateTime) & ":" & DatePart("N", dtDateTime) ' så fjerner du bare denne del med sekunderne & ":" & DatePart("S", dtDateTime)

doMysqlDateTime = dtDateTime
End Function
Select * FROM bruger where dato <= doMysqlDateTime "

altså:
Function doMysqlDateTime ()
dtDateTime = DateAdd("d", -1, now())
dtDateTime = DatePart("YYYY", dtDateTime) & "-" & DatePart("M", dtDateTime) & "-" & DatePart("D", dtDateTime) & " " & DatePart("H", dtDateTime) & ":" & DatePart("N", dtDateTime)

doMysqlDateTime = dtDateTime
End Function
Select * FROM bruger where dato <= doMysqlDateTime "
Avatar billede cermitto Nybegynder
19. april 2006 - 15:51 #14
Hvilket format skal MySql være og hvordan skriver jeg tiden ind, bare med Now()
Avatar billede mitbrugernavn Praktikant
19. april 2006 - 15:52 #15
-> fennec
hvis der skal gøre brug ag mysql's indbyggede funktion så skal feltet vel også være sat til dato og ikke tekst eller hva'????
Avatar billede cermitto Nybegynder
19. april 2006 - 15:56 #16
Det er også en der hedder datetime, men synes ikke der kommer noget ind med now()
Avatar billede mitbrugernavn Praktikant
19. april 2006 - 16:01 #17
hvis du sætter db til datetime så indsætter du således
Insert into bruger (dato) value (#" & now() &"#)

og så henter du som fennec beskrev tidligere
Set rs = Conn.Execute("Select * FROM bruger where dato <= DATE_ADD(now(), INTERVAL -1 DAY)")
Avatar billede cermitto Nybegynder
19. april 2006 - 16:03 #18
Fint, prøver jeg...
Avatar billede fennec Nybegynder
19. april 2006 - 16:07 #19
... Det er altid en god ide at gemme dato værdier i en datotype. Det med at gemme datoer i tekst felter giver ofte bare problemer. Hvis du endelig vil uden om datotyperne, for at gøre det cross-DB, skal du over i decimaltal istedet, men der skal du så selv konvertere dine datoer frem og tilbage i koden.

Man vil så gemme dato/klokkeslet, som noget i denne stil:
Som dato: 19-04-2006 16:06:15
Som tal: 20060419,160615
Avatar billede cermitto Nybegynder
19. april 2006 - 16:08 #20
Desværre skriver intet ind i databasen
Avatar billede mitbrugernavn Praktikant
19. april 2006 - 16:20 #21
hvis du kører denne streng
strSQL="Insert into bruger (dato) values (#" & now() &"#)"
set rs = conn.execute(strSQL)
sætter den så ikke noget ind ?????
Avatar billede mitbrugernavn Praktikant
19. april 2006 - 16:26 #22
prøv at sætte den til date i kolonne i mysql og så indsætte således

hvis du kører denne streng
strSQL="Insert into bruger (dato) values ('" & now() &"')"
set rs = conn.execute(strSQL)
sætter den så ikke noget ind ?????
Avatar billede cermitto Nybegynder
19. april 2006 - 16:43 #23
Den sætter ikke noget ind hverken med date eller datetime
Avatar billede cermitto Nybegynder
19. april 2006 - 16:45 #24
Jeg er noget forvirret, kan du forklare mig hvorfor denne streng virker, databasen bruger også her formatet varchar.

Conn.execute = "DELETE FROM bruger where dato <= DATE_SUB('" & doMysqlDateTime() & "', INTERVAL 24 HOUR)"
Avatar billede mitbrugernavn Praktikant
19. april 2006 - 16:46 #25
kommer der ingen fejl ??? det lyder da lidt underligt
Avatar billede cermitto Nybegynder
19. april 2006 - 16:53 #26
får ingen fejl...  skriver kun ind med varchar format ??
Avatar billede mitbrugernavn Praktikant
19. april 2006 - 17:00 #27
måske denne

Set rs = Conn.Execute("Select * FROM bruger where DATE_ADD(dato, INTERVAL 24 HOUR) <= Now() ")
Avatar billede cermitto Nybegynder
19. april 2006 - 17:19 #28
Mener du den kan trække et tekst format ud?
Avatar billede mitbrugernavn Praktikant
19. april 2006 - 17:29 #29
ja hvis den kan slette med denne Conn.execute = "DELETE FROM bruger where dato <= DATE_SUB('" & doMysqlDateTime() & "', INTERVAL 24 HOUR)"

så burde du også kunne hente med følgende
Function doMysqlDateTime ()
dtDateTime = DateAdd("d", -1, now())
dtDateTime = DatePart("YYYY", dtDateTime) & "-" & DatePart("M", dtDateTime) & "-" & DatePart("D", dtDateTime) & " " & DatePart("H", dtDateTime) & ":" & DatePart("N", dtDateTime) ' så fjerner du bare denne del med sekunderne & ":" & DatePart("S", dtDateTime)

doMysqlDateTime = dtDateTime
End Function

Set rs = Conn.Execute("Select * FROM bruger where dato <= DATE_SUB('" & doMysqlDateTime() & "', INTERVAL 0 HOUR)"
Avatar billede cermitto Nybegynder
19. april 2006 - 18:28 #30
Fatter ikke en brik af det her..

Set rs = Conn.Execute("Select * FROM bruger where dato <= DATE_SUB('" & doMysqlDateTime() & "', INTERVAL 0 HOUR)")

Den hiver alt ud.
-og den her ingenting

Set rs = Conn.Execute("Select * FROM bruger where dato >= DATE_SUB('" & doMysqlDateTime() & "', INTERVAL 0 HOUR)"
Avatar billede mitbrugernavn Praktikant
20. april 2006 - 08:08 #31
doMysqlDateTime = "2006-04-10 12:05"

Set rs = Conn.Execute("Select * FROM bruger where dato <= DATE_SUB('" & doMysqlDateTime() & "', INTERVAL 0 HOUR)")

prøv at sætte en dato på
Avatar billede cermitto Nybegynder
20. april 2006 - 10:27 #32
i stedet for '" & doMysqlDateTime() & "' eller hvad?
Avatar billede mitbrugernavn Praktikant
20. april 2006 - 12:05 #33
doMysqlDateTime = "2006-04-20 12:00"

Set rs = Conn.Execute("Select * FROM bruger where dato <= DATE_SUB('" & doMysqlDateTime() & "', INTERVAL 24 HOUR)")

sådan
Avatar billede cermitto Nybegynder
22. april 2006 - 13:39 #34
desværre :(

Error:
'* FROM bruger where dato <= DATE_SUB('2006-4-22 13:38:2
Avatar billede mitbrugernavn Praktikant
22. april 2006 - 14:08 #35
doMysqlDateTime = "2006-04-20 12:00"

Set rs = Conn.Execute("Select FROM bruger where dato <= DATE_SUB('" & doMysqlDateTime() & "', INTERVAL 24 HOUR)")

prøv at fjern *
Avatar billede cermitto Nybegynder
23. april 2006 - 12:29 #36
Desværre, den vælger bare alle poster uanset dato, er vi stødet på noget som er umiligt at lave med ASP og MySql måske??
Avatar billede mitbrugernavn Praktikant
23. april 2006 - 12:35 #37
det er ikke umuligt, men det er noget nemmere hvis formatet i mySQL er sat til datetime - så er det dato mod dato og ikke tekst mod dato - måske skulle du arbejde mod det.
Avatar billede cermitto Nybegynder
23. april 2006 - 12:39 #38
Ja, men alle min poster sættes jo til 00:00:00 hvis jeg formater fra varchar til datetime nu :(
Avatar billede cermitto Nybegynder
23. april 2006 - 12:55 #39
Hvadså hvis jeg laver en tabel der hedder timestamp, så sætter MySql selv et tidsformat ind som 20062304125240 men kan det bruges til noget?
Avatar billede mitbrugernavn Praktikant
23. april 2006 - 13:02 #40
dagsdato = now()
gaarsdato = DateAdd("d", -1, dagsdato)
gaarsdato = replace(gaarsdato," ","")
gaarsdato = replace(gaarsdato,":","")
gaarsdato = replace(gaarsdato,"-","")
'nu har du en talrække
Set rs = Conn.Execute("Select * FROM bruger where dato <= gaarsdato")
Avatar billede mitbrugernavn Praktikant
23. april 2006 - 13:02 #41
hov husk at fjerne stjernen
Avatar billede mitbrugernavn Praktikant
23. april 2006 - 13:04 #42
det kan være den reagere med forkert format så prøv dette

strSQL = "Select from bruger where dato <= " & gaarsdato
set rs = conn.execute(strSQL)
Avatar billede mitbrugernavn Praktikant
23. april 2006 - 13:05 #43
ups du skal selvfølgelig skifte where dato ud med where timestamp (går ud fra at det er det kolonnen hedder ;-))
Avatar billede cermitto Nybegynder
23. april 2006 - 13:46 #44
Fejl fejl fejl :(

talformatet på gaarsdato er ved response.write: 22042006134428
Formatet i MySql står ved response.write som: 20060323133556
Avatar billede mitbrugernavn Praktikant
23. april 2006 - 14:04 #45
dagsdato = now()
dagsdato_new = DateAdd("d", -1,Year(dagsdato) & "-" & Month(dagsdato) & "-" & Day(dagsdato) & " " & Time())
if Month(dagsdato_new) < 10 then
md = "0" & Month(dagsdato_new)
else
md = Month(dagsdato_new)
end if
if day(dagsdato_new) < 10 then
dag = "0" & day(dagsdato_new)
else
dag = day(dagsdato_new)
end if
gaarsdato = Year(dagsdato_new) & "-" & md & "-" & dag & " " & Time()

response.write gaarsdato & "<br>"
gaarsdato = replace(dagsdato," ","")
gaarsdato = replace(gaarsdato,":","")
gaarsdato = replace(gaarsdato,"-","")
response.write gaarsdato & "<br>"
Avatar billede cermitto Nybegynder
24. april 2006 - 11:26 #46
Response på dit forslag viser:

2006-04-23 11:24:26
24042006112426

Men stadig er talformatet i MySql sådan:

20060424112501
Avatar billede cermitto Nybegynder
24. april 2006 - 11:27 #47
Det må næste være at tage Now() og fjerne - : eller hvad??
Avatar billede mitbrugernavn Praktikant
24. april 2006 - 12:56 #48
det er da godt nok en hård nød

dagsdato = now()
dagsdato_new = DateAdd("d", -1,Year(dagsdato) & "-" & Month(dagsdato) & "-" & Day(dagsdato) & " " & Time())
if Month(dagsdato_new) < 10 then
md = "0" & Month(dagsdato_new)
else
md = Month(dagsdato_new)
end if
if day(dagsdato_new) < 10 then
dag = "0" & day(dagsdato_new)
else
dag = day(dagsdato_new)
end if
tid = time()
tid = replace(tid,":","")
gaarsdato = Year(dagsdato_new) & md & dag & tid

response.write gaarsdato & "<br>"

nu vender det rigtigt ;-)))
Avatar billede cermitto Nybegynder
25. april 2006 - 08:49 #49
Så får jeg nogen resultater ud :-) tænker bare på, hvordan læses talene?
Læses det som et alm. tal eller faktisk som et tidsformat?

Hvis det er alm. tal vil det kunne give problemer.
Avatar billede mitbrugernavn Praktikant
25. april 2006 - 09:10 #50
det ved jeg faktisk ikke - men læses det som talformat må du dele strengen op, men troede at timestamp var en ekstra kolonne du havde sat ind og kun bruger til dette.
Avatar billede mitbrugernavn Praktikant
25. april 2006 - 10:43 #51
kunne du bruge svaret ;-))
Avatar billede cermitto Nybegynder
26. april 2006 - 12:30 #52
Timestamp er en ekstra kolonne.

Men der skal alligevel mere til, fordi gaarsdato er feks. = 20060427103010 og i kolonnen timestamp 20060326104020 så er det da ikke nok bare at skrive:

Set rs = Conn.Execute("Select * FROM bruger where brugernavn = '"&session("brugernavn")&"' AND timestamp <= '"& gaarsdato &"' ORDER BY ID DESC")

???
Avatar billede mitbrugernavn Praktikant
26. april 2006 - 12:33 #53
får du fejl eller hva?
Avatar billede cermitto Nybegynder
26. april 2006 - 13:41 #54
Nej nej, men ligningen gør da ingenting, hvordan trækker den eks. 1 fra?
Det kan jeg ikke se, får ingen fejl, men heller ingen resultat.
Avatar billede mitbrugernavn Praktikant
26. april 2006 - 15:32 #55
dagsdato = now()
dagsdato_new = DateAdd("d", -1,Year(dagsdato) & "-" & Month(dagsdato) & "-" & Day

'''''den trækker 1 dag fra her inden den går videre - det kan du også se hvis du aflæser din talrække 20060427103010 - 20060326104020


(dagsdato) & " " & Time())
if Month(dagsdato_new) < 10 then
md = "0" & Month(dagsdato_new)
else
md = Month(dagsdato_new)
end if
if day(dagsdato_new) < 10 then
dag = "0" & day(dagsdato_new)
else
dag = day(dagsdato_new)
end if
tid = time()
tid = replace(tid,":","")
gaarsdato = Year(dagsdato_new) & md & dag & tid

response.write gaarsdato & "<br>"
Avatar billede cermitto Nybegynder
27. april 2006 - 14:47 #56
Tror nok jeg giver op, der er simpelthen fejl på 99 % af de her forsøg, er ikke sikker på det kommer til at virke.:(

Expected ')'
mail.asp, line 20, column 81
dagsdato_new = DateAdd("d", -1,Year(dagsdato) & "-" & Month(dagsdato) & "-" & Day
--------------------------------------------------------------------------------^
Avatar billede cermitto Nybegynder
27. april 2006 - 19:43 #57
Årsagen til at now() og date() skriver en total underlig dato i MySql er måske at jeg difinere tidsformatet med denne?

Session.LCID = 1030
Avatar billede mitbrugernavn Praktikant
28. april 2006 - 08:17 #58
dagsdato = now()
dagsdato_new = DateAdd("d", -1,Year(dagsdato) & "-" & Month(dagsdato) & "-" & Day(dagsdato) & "-" & Time())

'''''den trækker 1 dag fra her inden den går videre - det kan du også se hvis du aflæser din talrække 20060427103010 - 20060326104020



if Month(dagsdato_new) < 10 then
md = "0" & Month(dagsdato_new)
else
md = Month(dagsdato_new)
end if
if day(dagsdato_new) < 10 then
dag = "0" & day(dagsdato_new)
else
dag = day(dagsdato_new)
end if
tid = time()
tid = replace(tid,":","")
gaarsdato = Year(dagsdato_new) & md & dag & tid

response.write gaarsdato & "<br>"
Avatar billede cermitto Nybegynder
28. april 2006 - 16:15 #59
mitbrugernanv >> Der opstod en Microsoft VBScript-kørselsfejl (0x800A000D)
Typer stemmer ikke overens: '[string: "2006-4-28-16:14:54"]'
Avatar billede mitbrugernavn Praktikant
28. april 2006 - 17:32 #60
dagsdato = now()
dagsdato_new = DateAdd("d", -1,Year(dagsdato) & "-" & Month(dagsdato) & "-" & Day(dagsdato) & "-" & Time())


if Month(dagsdato_new) < 10 then
md = "0" & Month(dagsdato_new)
else
md = Month(dagsdato_new)
end if
if day(dagsdato_new) < 10 then
dag = "0" & day(dagsdato_new)
else
dag = day(dagsdato_new)
end if
tid = time()
tid = replace(tid,":","")
gaarsdato = Year(dagsdato_new) & md & dag & tid


Set rs = Conn.Execute("Select * FROM bruger where brugernavn = '"&session("brugernavn")&"' AND timestamp <= '"& gaarsdato &"' ORDER BY ID DESC")

'prøv dette først

'er det sådan du mener at der opstår fejl - så hvis fejl så skift denne linie
Set rs = Conn.Execute("Select * FROM bruger where brugernavn = '"&session("brugernavn")&"' AND timestamp <= '"& gaarsdato &"' ORDER BY ID DESC")


'med
strSQL = "Select * FROM bruger where brugernavn = '"&session("brugernavn")&"' AND timestamp <= '"& gaarsdato &"' ORDER BY ID DESC"
response.write strSQL

'og send så det den udskriver her
Avatar billede cermitto Nybegynder
29. april 2006 - 09:58 #61
Typen stemmer ikke overens i denne linie:

dagsdato_new = DateAdd("d", -1,Year(dagsdato) & "-" & Month(dagsdato) & "-" & Day(dagsdato) & "-" & Time())

Typer stemmer ikke overens: '[string: "2006-4-29-09:56:14"]'
Avatar billede mitbrugernavn Praktikant
29. april 2006 - 10:18 #62
dagsdato_new = DateAdd("d", -1,Year(dagsdato) & "-" & Month(dagsdato) & "-" & Day(dagsdato) & " " & Time())

Typer stemmer ikke overens: '[string: "2006-4-29-09:56:14"]

'fjer den sidste bindestreg mellem day og time
Avatar billede cermitto Nybegynder
29. april 2006 - 15:38 #63
Har jeg prøvet så tilter det totalt
Avatar billede cermitto Nybegynder
29. april 2006 - 15:43 #64
Der opstår stadig fejl, her er SQL'en

Select * FROM bruger where timestamp <= '20060428154228' ORDER BY ID DESC
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester