webForumDet fria alternativet

Konvertera datumet baklänges, eller hur man ska säga?

ASP

12 svar · 416 visningar · startad av G8

Medlem sedan jan. 20011 213 inlägg
Frågan#1

Hej

Jag konverterar tid och datum från databasen till användarens aktuella tid med hjälp av:

<%
tidszone = session("timezone")
session.lcid=2057
datum = rs("datum")
'##lägger till/tar bort timmar beroende på vilken tidszon man befinner sig i
datum = dateadd("h",tidszone,datum)
If right(Session("timezone"), 2) = ".5" Then
datum = dateAdd("n",30, datum)
End if
'##lägger till en nolla innan talet för dagen om det är dag 1-9 i månaden
if day(datum)<=9 then
response.write("0")
end if
response.write day(datum) & " " & _
mid(monthname(month(datum)),1,3) & " " & _
year(datum) & " " & datepart("h",datum) & _
":" & right("0"& datepart("n",datum),2)%>

Jag har ett bokningsformulär där man som användare väljer datum genom fem dropdowns (dag, månad, år, timmar, minuter) och sätter ihop det till gilktligt datum med:

datumet = request.form("year")&"-"&request.Form("month")&"-"&Request.Form("day")&" " & Request.Form("hour")&":"&Request.Form("minute")&""

Nu till problemet, jag måste konvertera det datum och tid som användaren väljer tillbaka till CET, eller hur man ska säga, så att klockslag blir rätt när det skrivs in i databasen. Formatet som session("timezone") står i är +/-H.M (H=timmar, M=minuter). Nån som förstår hur jag menar och kanske till och med har förslag på hur jag ska lösa det?

Mvh

//G8

Medlem sedan jan. 20011 213 inlägg
#2

Det enklaste vore ju om det fanns nått sätt att ta reda på om session("timezone") är + eller - och sedan bara vända på pannkakan... Finns det nått sätt?

//G8

Medlem sedan jan. 20011 213 inlägg
#3

Hmm, skulle jag inte kunna göra så här ungefär:
Ponera att session("timezone") = +4

if session("timezone") < 0 then
'konvertera tillbaka
nytt_datum = session("timezone") - (session("timezone")*2)
else if session('timezone") > 0 then
'konvertera tillbaka
nytt_datum = session("timezone") + (session("timezone")*2)
else if
'Ingen tidskillnad, behöver inte konvertera
nytt_datum = 0
end if

nytt_datum borde ju då innehålla antalet timmar för att konvertera tillbaka tiden till CET...

Sitter på jobbet nu så jag kan inte testa koden, men är det någon som ser varför denna kodsnutt inte skulle funka?

Mvh

//G8

Medlem sedan mars 20015 287 inlägg
#4

Kan du inte i din seleclista köra typ:

pseudokod:
[kod]

<select name = "tut" action = "tut.asp" method = "post" >
<option value="<% = orginaltid %>"><% = omgjord_tid</option>
</select>

Så du direkt får in rätt tid i databasen.

Medlem sedan jan. 20011 213 inlägg
#5

Jo, men grejjen är ju den att en användare i austratien bokar datum och tid efter den tidszon som han befinner sig i, och när det sedan skrivs in i databasen så vill jag att den är i CET, så att all data i databasen följer samma standard...

eller var det jag som missuppfattade dig nu?

//G8

Medlem sedan mars 20015 287 inlägg
#6

Jag menar alltså att det värde jag kallar orginaltid ska vara CET och läggas in i databasen, men det som visas för den australiske (!) killen ska vara omgjort enligt din funktion/modell.
På så sätt behöver du ju aldrig konvertera tillbaks tänkte jag.

Medlem sedan jan. 20011 213 inlägg
#7

Jo, men efterson att han (den australske) väljer tid genom ett antal dropdowns så väljer han ju dag och tid efter sina premisser, alltså australisk tid...

Du menar att jag skulle konvertera dropdownsen så att de stämmer överrens med CET, eller?

//G8

Medlem sedan feb. 200112 078 inlägg
#8

solbulle skrev:

australiske (!)

Australiensiska. ;)

Medlem sedan jan. 20011 213 inlägg
#9

potatis - potäter

;)

Medlem sedan jan. 20011 213 inlägg
#10

Här kommer komplett kod, lite omständigt kanske men det funkar :)

datumet = request.form("year")&"-"&request.Form("month")&"-"&Request.Form("day")&" " & Request.Form("hour")&":"&Request.Form("minute")&""
'##Konvertera datumet till CET
tidszone = session("timezone")
'##konverterar serverns tid för att kunna jämnföra
servertid = dateadd("h",tidszone,now())
If right(Session("timezone"), 2) = ".5" Then
servertid = dateAdd("n",30, servertid)
end if
'##konverterar "datum" för att skriva in rätt datum i databasen
if session("timezone") < 0 then
'konvertera tillbaka
tidszone = (session("timezone") - (session("timezone")*2))
datum = dateadd("h",tidszone,datumet)
If right(Session("timezone"), 2) = ".5" Then
datum = dateadd("h",-1,datum)
datum = dateAdd("n",30, datum)
End if
else if session("timezone") > 0 then
'konvertera tillbaka
tidszone = session("timezone") - (session("timezone")*2)
datum = dateadd("h",tidszone,datumet)
If right(Session("timezone"), 2) = ".5" Then
datum = dateadd("h",-1,datum)
datum = dateAdd("n",30, datum)
End if
else if session("timezone") = 0 then
'Ingen tidskillnad, behöver inte konvertera
datum = datumet
end if
end if
end if

//G8

Medlem sedan mars 20015 287 inlägg
#11

Lite lurig kod tycker jag, är inte dina båda stycken med "konvertera tillbaka"-kod likadana?

kan du inte då typ skriva:

if session("timezone") <> 0 then

'konvertera osv

else 

datum = datumet

End If
Medlem sedan jan. 20011 213 inlägg
#12

Ja, jag började skriva om allting igen... Jag hade visst skrivit en ganska usel kod, som inte ens fungerade ;)

Postar den färdiga koden när den väl är klar, nån gång ikväll förhoppningsvis

//G8

Medlem sedan jan. 20011 213 inlägg
#13

Okej, här kommer färdig kod, och det bästa av allt, den fungerar :)

datumet = request.form("year")&"-"&request.Form("month")&"-"&Request.Form("day")&" " & Request.Form("hour")&":"&Request.Form("minute")&""
session.lcid=1053
'##konverterar "datum" för att skriva in rätt datum i databasen
if session("timezone") <> 0 then  'större eller mindre än 0
tidszone = CINT((session("timezone") - (session("timezone")*2))) 'omvandlar + till minus och tvärtom
If right(Session("timezone"), 2) = ".5" Then
If CINT(session("timezone")) < 0 then 'mindre än
tidszone = tidszone*(60/10)-60
else
tidszone = tidszone*60/10
end if
else
tidszone = tidszone*60
end if
datum = dateadd("n",tidszone,datumet)
else 'lika med 0
'##Ingen tidskillnad, behöver inte konvertera
datum = datumet
end if
'##Kontrollerar att datumet är angivet i korrekt format
if not isdate(datum) then
MYMESSAGE = Server.URLEncode("Please select a valid date!<br><br>Please wait...")
Response.Redirect ("delay.asp?DELAY_TIME=3&DELAY_MESSAGE=" & MYMESSAGE & "&REDIRECT_URL=javascript:history.back(1)")
end if
'##kontrollerar så att angivit datum är nyare än aktuell servertid
if cdate(datum) < now() then
MYMESSAGE = Server.URLEncode("You must select a date and time from the future!<br><br>Please wait...")
Response.Redirect ("delay.asp?DELAY_TIME=3&DELAY_MESSAGE=" & MYMESSAGE & "&REDIRECT_URL=javascript:history.back(1)")
end if
258 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
123 ms — deklarationer (db)
0 ms — hämta statistik (cache)
132 ms — hämta tråd, inlägg och bilagor (db)
123 ms — ändringar (db)