Een efficiŽnt datumsysteem in ASP.

Intro
Ok deze tutorial gaat al een stapje verder in mijn ASP-reeks, het komt er op neer dat ik mijn bescheiden mening over het gebruik van het type date ga geven, en een in veel opzichten betere methode ga voorstellen (+ concrete code).

Wat is er dan zo vervelend aan dat datetype ?
Wel zoals sommigen weten ben ik mee beheerder van een grote site gebasseerd op MSSQL en ASP, en vroeger nog op Access. Doordat het project succesvol werd zijn er vele servermigratie's geweest en zijn we ook de wereld rondgegaan. Nu op zich waren dat alleen verbeteringen maar de verschillende datum instellingen hebben ons meer dan eens parten gespeeld. Zo was het op de Amerikaanse server eerst de maand en dan de dag terwijl we van een andere instelling kwamen.
Ook het sorteren van de datums gaf problemen bij zowel MSSQL als Access.
Dit gaf natuurlijk keer op keer teveel aanpaswerk en hebben we een nieuw systeem bedacht : de datum in een string steken.

Enkel voordelen :
- snel sorteerbaar
- draait op elke database of server
- werkt sneller (lees: performanter)

Concreet
Een datum werd vanaf nu dus op deze manier voorgesteld :
jaar + maand + dag + uur + minuten + seconden.
Bv.: 20031110221445 is dus eigenlijk de 10de dag van de 11de maand van het jaar 2003, zelfde manier van lezen voor de tijd.

ASP code
De implementatie in de ASP code was zeer gemakkelijk, 1 include op de pagina's die met datums werkte, was genoeg hier zijn de 2 functies :
CODE
  1.  
  2. Function DecodeDate(sDate)
  3. On Error Resume Next
  4.  
  5. DecodeDate = ""
  6.  
  7. If (Len(sDate) > 0) Then
  8. Dim nDay
  9. Dim nMonth
  10. Dim nYear
  11. Dim nHour
  12. Dim nMinute
  13. Dim nSecond
  14.  
  15. nDay = Mid(sDate, 7, 2)
  16. nMonth = Mid(sDate, 5, 2)
  17. nYear = Mid(sDate, 1, 4)
  18. nHour = Mid(sDate, 9, 2)
  19. nMinute = Mid(sDate, 11, 2)
  20. nSecond = Mid(sDate, 13, 2)
  21.  
  22. DecodeDate = CDate(nDay & "/" & nMonth & "/" & nYear & " " & nHour & ":" & nMinute & ":" & nSecond)
  23. End If
  24. End Function
  25.  
CODE
  1.  
  2. Function EncodeDate(dDate)
  3. If (IsDate(dDate) = True) Then
  4. Dim nDay
  5. Dim nMonth
  6. Dim nYear
  7. Dim nHour
  8. Dim nMinute
  9. Dim nSecond
  10.  
  11. nDay = DatePart("d", dDate)
  12. nMonth = DatePart("m", dDate)
  13. nYear = DatePart("yyyy", dDate)
  14. nHour = DatePart("h", dDate)
  15. nMinute = DatePart("n", dDate)
  16. nSecond = DatePart("s", dDate)
  17.  
  18. If (Len(nDay) = 1) Then
  19. nDay = "0" & nDay
  20. End If
  21.  
  22. If (Len(nMonth) = 1) Then
  23. nMonth = "0" & nMonth
  24. End If
  25.  
  26. If (Len(nHour) = 1) Then
  27. nHour = "0" & nHour
  28. End If
  29.  
  30. If (Len(nMinute) = 1) Then
  31. nMinute = "0" & nMinute
  32. End If
  33.  
  34. If (Len(nSecond) = 1) Then
  35. nSecond = "0" & nSecond
  36. End If
  37.  
  38. EncodeDate = nYear & nMonth & nDay & nHour & nMinute & nSecond
  39. Else
  40. EncodeDate = ""
  41. End If
  42. End Function
  43.  
Aangezien ik van het principe ben om niet alles te verklappen omdat andere mensen anders niet snel genoeg bijleren, lijkt me dit voldoende stof tot nadenken en experimenteerwerk...

Wanneer u mijn mening niet deelt, ik sta open voor discussie en uitleg, post gewoon in het forum...

groetjes,
TimDit artikel werd geschreven door Bridge_Burner op zondag 12 oktober 2003 om 00:01 en werd sindsdien 1995 keer gelezen.

  • Pagina
  • 1 van 1

Geen reacties gevonden
Er werden nog geen reacties bij dit artikel geplaatst.
  • Indien je denkt iets te kunnen toevoegen aan het artikel, kan je zelf een reactie schrijven via de koppeling Plaats een reactie bij dit artikel hieronder.
  • Indien je andere commentaar (iets wat niet meteen functioneel bijdraagt aan het artikel zelf) hebt, kan je een bedankje formuleren via de koppeling Plaats een bedankje bij dit artikel hieronder.