isDST Function

by João Vicente Machado

HTML

<script src="https://cdn.jsdelivr.net/momentjs/latest/moment.min.js"></script>
<script src="https://cdn.jsdelivr.net/jquery/1/jquery.min.js"></script>

JavaScript

var myDate = new Date();
document.write("Current date/time: " + myDate + "<br />");
document.write(isDateInDST(myDate));
            
function isDateInDST(aDate)
{
  var year = aDate.getYear();
  if (year < 1000)
    year += 1900;

  var firstSwitch = 0;
  var secondSwitch = 0;
  var lastOffset = 99;

  // Loop through every month of the current year
  for (i = 0; i < 12; i++)
  {
    // Fetch the timezone value for the month
    var newDate = new Date(Date.UTC(year, i, 0, 0, 0, 0, 0));
    var tz = -1 * newDate.getTimezoneOffset() / 60;

    // Capture when a timzezone change occurs
    if (tz > lastOffset)
      firstSwitch = i-1;
    else if (tz < lastOffset)
      secondSwitch = i-1;

    lastOffset = tz;
  }

  // Go figure out date/time occurences a minute before
  // a DST adjustment occurs
  var secondDstDate = FindDstSwitchDate(year, secondSwitch);
  var firstDstDate = FindDstSwitchDate(year, firstSwitch);

  if (firstDstDate == null && secondDstDate == null)
    return false;
  else {
		var dInic = Date.parse(firstDstDate);
		var dData = Date.parse(aDate);
		var dFim = Date.parse(secondDstDate);
    
		document.write('Inic: ' + dInic + "<br />");  
		document.write('Data: ' + dData + "<br />");  
		document.write('Fim : ' + dFim + "<br />");  
    
    document.write("<br />");  
    document.write("<br />");  
    
    document.write("dInic menor que dData: " + dInic <= dData + " <br />");  
    document.write("dData menor que dFim: " + dData <= dFim + " <br />");  

    return dInic <= dData && dData <= dFim;
  }
}

function FindDstSwitchDate(year, month)
{
  // Set the starting date
  var baseDate = new Date(Date.UTC(year, month, 0, 0, 0, 0, 0));
  var changeDay = 0;
  var changeMinute = -1;
  var baseOffset = -1 * baseDate.getTimezoneOffset() / 60;
  var dstDate;

  // Loop to find the exact day a timezone adjust occurs
  for (day = 0; day < 50; day++)
  {
    var tmpDate = new Date(Date.UTC(year, month, day, 0, 0, 0, 0));
    var tmpOffset = -1 *...