function IsDaylightSaving(my_msec, my_year)
{
 var jjjArray = "000031059090120151181212243273304334"; 
// var wk_year = 1;
// wk_year *= my_year;
 var wk_year = my_year*1;
 if (wk_year < 100)
  {
  if (wk_year < 10)
   wk_year += 2000;
  else
   wk_year += 1900;
  }
// var wkdate=new Date(wk_year, 0, 1, 0, 0, 0);
// var myjan1 = wkdate.getTime();
// var wkdate=new Date(wk_year, 11, 31, 0, 0, 0);
// var mydec31 = wkdate.getTime();
// var days_per_year = mydec31 - myjan1;
// days_per_year /= 86400000;
// days_per_year++;
 var my_leap = wk_year % 100;
 if (my_leap == 0)
  my_leap = wk_year % 400;
 else
  my_leap = wk_year % 4;
 var wkdate=new Date();
 
 wkdate.setTime(my_msec);
 var my_hour = wkdate.getHours();
 var my_month = wkdate.getMonth();
 var my_day = wkdate.getDate();
 var my_ww = wkdate.getDay();
 var wknx = my_month * 3;
 var wkstr = jjjArray.substring(wknx, wknx+3);
 var my_jjj = 1;
 my_jjj *= wkstr;
 if (my_month > 1 && my_leap == 0)
  my_jjj++;
 my_jjj += my_day;
 return (IsDS(wk_year, my_jjj, my_ww, my_hour));
 }

function IsDS(wk_year, my_jjj, my_ww, my_hour)
{
 var ds = 0;
 if (wk_year > 2006)
  {
// Rules for Daylight Saving Time:
/* As of 2007: 2nd Sunday in March til 1st Sunday in November */
  my_jjj -= my_ww;
  ds = CalcDS(my_jjj,my_ww,my_hour,67,305);
  }
 else
  {
  if (wk_year > 1985)
   {
/* From 1986: 1st Sunday in April til last Sunday in October */
   my_jjj -= my_ww;
   ds = CalcDS(my_jjj,my_ww,my_hour,91,298);
   }
  else
   {
   if (wk_year > 1965)
    {
/* Nixon's "Emergency Daylight": from Jan 6, 1974 until Apr 27, 1975 */
    if ((wk_year == 1974 && my_jjj >=6) ||
        (wk_year == 1975 && my_jjj <= 117))
      ds = 1;
    else
     {
     my_jjj -= my_ww;
/* From 1966: last Sunday in April til last Sunday in October */
     ds = CalcDS(my_jjj,my_ww,my_hour,114,298);
     }
    }
   else
    {
/* Roosevelt's "Wartime Saving": from Feb 9, 1942 until Sept 30, 1945 */
    if ((wk_year == 1942 && my_jjj >=40) ||
         wk_year == 1943 || wk_year == 1944 ||
        (wk_year == 1945 && my_jjj <= 273))
      ds = 1;
    else
     {
     if (wk_year == 1918 || wk_year == 1919)
      {
/* WW I: (rough guess) March 31 to Oct 31 of 1918 and 1919*/
      if (my_jjj >= 90 && my_jjj <= 304)
       ds = 1;
      }
     }
    }
   }
  }
return ds;
}

function CalcDS(my_jjj,my_ww,my_hour,start_ds,end_ds)
{  
// Set DS flag for modern rules: 2 am on Sundays
// DS 0=Standard Time, 1=Daylight, 2=Neither (Spring), 3=Either (Fall)
var ds = 0;
if (my_jjj >= (start_ds+7) && my_jjj < end_ds)
 ds = 1;
else
 {
 if (my_ww == 0)
  {
  if (my_jjj >= start_ds && my_jjj < (start_ds+7))
   {
   if (my_hour > 2)
    ds = 1;
   else
    {
    if (my_hour == 2)
     ds = 2;
    }
   }
  else
   { 
   if (my_jjj >= end_ds && my_jjj < (end_ds+7))
    {
    if (my_hour < 1)
     ds = 1;
    else
     {
     if (my_hour == 1)
      ds = 3;
     }
    }
   }
  }
 else
  {
  if(my_jjj >= start_ds && my_jjj < end_ds)
   ds = 1;
  }
 }
return ds;
}