我创建了以下代码(可正常工作)以根据指定月份的星期打印不同的内容:

<script language="javascript">
<!--
var advent;
mytime=new Date();
mymonth=mytime.getMonth()+1;
mydate=mytime.getDate();
if (mymonth==12 && (mydate >= 1 && mydate <= 6)){document.write("xxx");
}
if (mymonth==12 && (mydate >= 7 && mydate <= 13)){document.write("yyy");
}
if (mymonth==12 && (mydate >= 14 && mydate <= 20)){document.write("zzz");
}
if (mymonth==12 && (mydate >= 21 && mydate <= 30)){document.write("qqq");
}
//-->
</script>

但是我需要每年针对Advent进行更改,并且Advent根据每年圣诞节的时间进行更改:



我该如何计算每年的降临周数?

最佳答案

从日期开始,该日期恰好是圣诞节前3周 Eve 。然后,向后走直到星期几是星期天:

function getAdvent(year) {
  //in javascript months are zero-indexed. january is 0, december is 11
  var d = new Date(new Date(year, 11, 24, 0, 0, 0, 0).getTime() - 3 * 7 * 24 * 60 * 60 * 1000);
  while (d.getDay() != 0) {
    d = new Date(d.getTime() - 24 * 60 * 60 * 1000);
  }

  return d;
}

getAdvent(2013);
// Sun Dec 01 2013 00:00:00 GMT-0600 (CST)

getAdvent(2012);
// Sun Dec 02 2012 00:00:00 GMT-0600 (CST)

getAdvent(2011);
// Sun Nov 27 2011 00:00:00 GMT-0600 (CST)

(2013年和2012年针对http://usccb.org/上的日历进行了测试和验证。2011年针对http://christianity.about.com/od/christmas/qt/adventdates2011.htm进行了验证)

09-20 22:10