Skip to content

Instantly share code, notes, and snippets.

@jthurteau
Last active August 26, 2016 02:00
Show Gist options
  • Save jthurteau/1b347bddee8e003bfa2ce23f253da539 to your computer and use it in GitHub Desktop.
Save jthurteau/1b347bddee8e003bfa2ce23f253da539 to your computer and use it in GitHub Desktop.
Testing for DST
var dst = function(){
var timeZone = 'EDT';
function dstDetect(dateStamp){
if (typeof(dateStamp) == 'undefined') {
var now = new Date();
dateStamp = now.getTime();
}
var timeObject = new Date(dateStamp);
var month = timeObject.getMonth();
var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
var monthString = months[month];
var day = timeObject.getDay();
var days = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];
var dayString = days[day];
var date = timeObject.getDate();
var dateString = date < 10 ? ('0' + date) : date;
var rfcDateString =
dayString + ', ' + dateString + ' '
+ monthString + ' ' + timeObject.getFullYear();
var baselineString = rfcDateString + ' 00:00:00 ' + timeZone;
var dateObject = new Date(baselineString);
var dateTimeStamp = dateObject.getTime();
var diffs = [];
for (var h = 0; h < 24; h++){
var offsetTime = new Date(dateTimeStamp + (h * 3600000));
var offsetHour = offsetTime.getHours();
diffs[h] = offsetHour - h;
}
return diffs;
}
function dstForward(current, dateStamp)
{
if (typeof(current) == 'undefined') {
current = getCurrentStamp();
}
var hourIndex = Math.floor(current / 3600000);
var dstMap = dstDetect(dateStamp);
return (dstMap[hourIndex] == 0 && dstMap[0] != 0);
}
function dstBack(current, dateStamp)
{
if (typeof(current) == 'undefined') {
current = getCurrentStamp();
}
var hourIndex = Math.floor(current / 3600000);
var dstMap = dstDetect(dateStamp);
return (dstMap[hourIndex] != 0 && dstMap[0] == 0);
}
function getCurrentStamp()
{
var now = new Date();
var startDay = new Date(now.getFullYear(), now.getMonth(), now.getDate());
return now.getTime() - startDay.getTime();
}
return {
dstForward : dstForward,
dstBack : dstBack,
setTimeZone : function(z){timeZone=z;}
};
}();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment