← Terug naar alle posts

Lotusscript snippet: Javascript timestamp naar een lotusscript date time waarde

2010-07-14

Tijdens een project waar we in Google Maps de tijd en lokatie van bepaalde items projecteren kwam ik even vast te zitten. Het ging om het omzetten van een Javascript timestamp naar een Lotusscript variabele. 

Enkele uitgangspunten:

  • Javascript timestamps worden geteld in seconden sinds 1 januari 1970.
  • Lotusscript timestamps worden geteld in seconden sinds 31 december 1899
  • De timestamps zijn altijd in de GMT tijdzone

Tijdens mijn zoektocht kon ik nergens een goed voorbeeld script vinden, daarom plaats ik de functie hier. Voor de meeste mensen waarschijnlijk gesneden koek, maar ik was er toch langer mee bezig dan gedacht. Niet vreemd met Nederland - Spanje op de achtergrond op de radio.

De code performance puristen onder ons zullen de Datenumber(1970,1,1) nog willen vervangen door een constante. Be my guest.

Function JSTimeStampToLSDateTime(dblJSEpochValue_IN As Double) As Variant  
	Const SECONDS_PER_DAY = 86400  
	  
	Dim dblSecondsSinceEpoch As Double  
	Dim dtGMTDateTime As Variant  
	Dim intAddZoneHours As Integer  
	Dim ndt As NotesDateTime  
	  
	dblSecondsSinceEpoch = dblJSEpochValue_IN + (Cdbl( Datenumber(1970,1,1) ) * SECONDS_PER_DAY) ' 86400 is het aantal seconden in een dag  
	dtGMTDateTime = Cdat(dblSecondsSinceEpoch / SECONDS_PER_DAY) ' en weer terug rekenen naar LS/VB  
	  
	Set ndt = New NotesDateTime(dtGMTDateTime)   
	intAddZoneHours = -Val(ndt.TimeZone) + Abs(ndt.IsDST) ' met -Val zorgen we er voor dat -2 wordt 2 en 2 wordt -2, Abs van een boolean = 1 of 0  
	Call ndt.AdjustHour(intAddZoneHours) ' verplaats de datum/tijd naar de juiste tijdzone inclusief zomertijd  
	  
	JSTimeStampToLSDateTime = ndt.Lslocaltime  
End Function