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
12 svar · 416 visningar · startad av G8
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
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
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
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.
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
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.
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
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
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
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
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