webForumDet fria alternativet

Formatera datum!

7 svar · 395 visningar · startad av jimpa

jimpaMedlem sedan jan. 2001361 inlägg
#1

Hej,

Om jag har ett datum format som ser ut så här:
19:32:10 Mar 22, 2005 PST

Hur kan man formatera det till:
3/22/2005 7:32:10 PM

Mvh
Jimpa

jimpaMedlem sedan jan. 2001361 inlägg
#2

Jag har löst det så här =)
Känns ju som att det borde finnas något smidigare sätt?

Dim strDate
	strDate = "19:32:10 Mar 22, 2005 PST"       '19:32:10 Mar 22, 2005 PST
	strDate = Replace(strDate, ",", "")         '19:32:10 Mar 22 2005 PST
	strDate = Replace(strDate, ":", "|")        '19|32|10 Mar 22 2005 PST
	strDate = Replace(strDate, " ", "|")        '19|32|10|Mar|22|2005|PST
Dim myArr
	myArr = Split(strDate, "|")
Dim myHour
	myHour = myArr(0)
Dim AMorPM
	AMorPM = ""
	 If myHour = "00" Then	
  	  AMorPM = "AM"
	 End If
	myHour = Replace(myHour, "00", "12")
	myHour = Replace(myHour, "01", "1")
	myHour = Replace(myHour, "02", "2")
	myHour = Replace(myHour, "03", "3")
	myHour = Replace(myHour, "04", "4")
	myHour = Replace(myHour, "05", "5")
	myHour = Replace(myHour, "06", "6")
	myHour = Replace(myHour, "07", "7")
	myHour = Replace(myHour, "08", "8")
	myHour = Replace(myHour, "09", "9")
IF AMorPM = "" THEN
 If Len(myHour) = Clng(2) Then
  AMorPM = "PM"
 Else
  AMorPM = "AM"
 End If
END IF 
	'myHour = Replace(myHour, "10", "10")
	'myHour = Replace(myHour, "11", "11")
	'myHour = Replace(myHour, "12", "12")
	myHour = Replace(myHour, "13", "1")
	myHour = Replace(myHour, "14", "2")
	myHour = Replace(myHour, "15", "3")
	myHour = Replace(myHour, "16", "4")
	myHour = Replace(myHour, "17", "5")
	myHour = Replace(myHour, "18", "6")
	myHour = Replace(myHour, "19", "7")
	myHour = Replace(myHour, "20", "8")
	myHour = Replace(myHour, "21", "9")
	myHour = Replace(myHour, "22", "10")
	myHour = Replace(myHour, "23", "11")
	
Dim myMinute
	myMinute = myArr(1)
Dim mySecond
	mySecond = myArr(2)
Dim myMonth
	myMonth = myArr(3)
	myMonth = Replace(myMonth, "Jan", "1")
	myMonth = Replace(myMonth, "Feb", "2")
	myMonth = Replace(myMonth, "Mar", "3")
	myMonth = Replace(myMonth, "Apr", "4")
	myMonth = Replace(myMonth, "May", "5")
	myMonth = Replace(myMonth, "Jun", "6")
	myMonth = Replace(myMonth, "Jul", "7")
	myMonth = Replace(myMonth, "Aug", "8")
	myMonth = Replace(myMonth, "Sep", "9")
	myMonth = Replace(myMonth, "Oct", "10")
	myMonth = Replace(myMonth, "Nov", "11")
	myMonth = Replace(myMonth, "Dec", "12")
Dim myDay
	myDay = myArr(4)
	myDay = Replace(myDay, "01", "1")
	myDay = Replace(myDay, "02", "2")
	myDay = Replace(myDay, "03", "3")
	myDay = Replace(myDay, "04", "4")
	myDay = Replace(myDay, "05", "5")
	myDay = Replace(myDay, "06", "6")
	myDay = Replace(myDay, "07", "7")
	myDay = Replace(myDay, "08", "8")
	myDay = Replace(myDay, "09", "9")
Dim myYear
	myYear = myArr(5)
Dim myFormatDateTime
	myFormatDateTime = myMonth & "/" & myDay & "/" & myYear & " " & myHour & ":" & myMinute & ":" & mySecond & " " & AMorPM
	myFormatDateTime = Cdate(myFormatDateTime)

		
		Response.Write myFormatDateTime
J.N.Medlem sedan apr. 20031 660 inlägg
#3

HEJ!

Jag förslår att du tittar på FormatDateTime-funktionen.
http://www.devguru.com/Technologies/vbscript/quickref/formatdatetime.html

,2 och ,3 borde göra exakt det du vill.

Ditt sätt fungerar säkert alldeles utmärkt, men vad händer om servern byts eller du flyttar webbplatsen?
Eftersom du inte har/visar att du sätter datum i ett speciellt format, (LCID) kan det bli helt fel då.

Erik JuhlinMedlem sedan maj 200010 687 inlägg
#4

Koden du skrivit gör ju att kl. 11 är PM. Stämmer inte riktigt...

Erik JuhlinMedlem sedan maj 200010 687 inlägg
#5

Kanske inte helt perfekt, men snyggare...

Function FixDate(sDate)
	Dim dDate, lHour As Long, sPeriod As String
	
	dDate = CDate(Mid(sDate, 1, Len(sDate) - 4))
	
	lHour = Hour(dDate)
	If lHour >= 12 Then
		sPeriod = "PM"
		lHour = lHour - 12
	Else
		sPeriod = "AM"
	End If
	If lHour = 0 Then
		lHour = 12
	End If
	
	FixDate = Month(dDate) & "/" & Day(dDate) & "/" & Year(dDate) _
		& " " & lHour & ":" & Right("0" & Minute(dDate), 2) & ":" & Right("0" & Second(dDate), 2) _
		& " " & sPeriod
End Function
jimpaMedlem sedan jan. 2001361 inlägg
#6

Tack Erik, din kod såg ju betydligt enklare och bättre ut!

Men nu har jag en annan fråga om datum!
Om jag skirver ut ett datum från servern med Now() så blir det ju till ändra serverns insällda datum-format eller till ett format satt av session.LCID.
Om datum är satt av Session.LCID så vill jag minnas att det kan bli problem när man vill spara det i en databas, har jag fel?
Hur som helst hur gör man för att vara helt säker på att ett datum alltid är i rätt format för att kunna sparas i en databas oavsett om serven är inställd till engelsk, svensk eller amrikansk etc...

?

jimpaMedlem sedan jan. 2001361 inlägg
#7

Om jag ställer frågan så här istället =)

Detta är (som jag förstår) en Amerikansk datum standard: 3/22/2005 7:32:10 PM

Kan man räkna med att det Alltid går att spara ett datum med det formatet i en MsAccess och MsSQL databas?

Ja eller Nej

J.N.Medlem sedan apr. 20031 660 inlägg
#8

HEJ!

Jag brukar göra så att jag formaterar det till svenska, eftersom norska datum innehåller punkter, och blir fel i en svensk Accessfil.

Jag skulle nog vilja påstå att använder du snedstreck i ditt format borde det inte krångla.
För säkerhets skull, kan du ju sätta engelskt format på sidan, OM någon skulle få för sig att flytta webbplatsen till en icke-engelsk server.

141 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
138 ms — hämta tråd, inlägg och bilagor (db)