Converting SAS date to Javascript datetime (in Javascript)
Converting a SAS date or datetime to javascript isn’t hard, but still - it should be easy to google for!
var dtSAS=20563; var dtJS=new Date(+new Date(1960,0,1) + dtSAS * 86400000); alert(dtJS.toUTCString());
Right, that should get rid of 95% of readers, for the rest of you, a quick explanation.
First, it’s important to note that SAS dates are stored as number of days since Jan 1st, 1960 - whereas Javascript “dates” are actually the number of milliseconds since Jan 1st 1970. This explains the 86400000 value (24 days _ 60 minutes _ 60 seconds * 1000 milliseconds), and why the embedded Date() object is set to 1960.
Next, there’s the ”+” sign before that nested Date object. That tells Javascript to return a numeric value (-315619200000) instead of a formatted value (Fri Jan 01 1960 00:00:00 GMT+0000 (GMT Standard Time)).
Finally, the .toUTCString() method avoids contention with local time conventions (eg the extra 1 hour in BST).
To make this even easier to deal with, I’ve knocked together a simple Javascript function - see fiddle.
// valid in ECMASCRIPT 2016 function dtSAStoJS(dtSAS,dtType='DATE'){ // accepts SAS unformatted DATE or DATETIME // dtType should be used to determine the above // -315619200000 is equivalent to +new Date(1960,0,1) // 86400000 is equivalent to 24h * 60m * 60s * 1000ms if(dtType==='DATE'){ return new Date(-315619200000 + dtSAS * 86400000); } else if (dtType==='DATETIME'){ return new Date(-315619200000 + dtSAS * 1000); } else { console.log('Unknown dtType value - ' + dtType); return null; } }; alert(dtSAStoJS(20578,'DATE').toUTCString()); alert(dtSAStoJS(1776743820,'DATETIME').toUTCString());If this post was useful, then do also check out How To Build Web Apps With SAS.
And in case you were wondering - datetime 1776743820 (GMT) was when Dr Goodnight officially announced SAS Viya!