我创建了以下代码(可以工作),根据指定月份的周数打印不同的代码:
<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:
圣诞节前四周的圣诞节开始。有 在圣诞节的四个星期天,然后是圣诞节。日期从一年开始变化 到一年,取决于圣诞节秋天的哪一天。因此,在 2010年,复临于11月28日开始。 2011年,它将在27日发生 十一月。
如何计算每年圣诞节开始的几周?
答案 0 :(得分: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进行了验证
答案 1 :(得分:1)
以下是我在评论中谈到的内容:
function getAdvent(year) {
var date = new Date(year, 11, 25);
var sundays = 0;
while (sundays < 4) {
date.setDate(date.getDate() - 1);
if (date.getDay() === 0) {
sundays++;
}
}
return date;
}
DEMO: http://jsfiddle.net/eyUjX/1/
它从特定年份的圣诞节开始。它会一天天过去,检查周日(.getDate()
返回0
)。遇到其中4个后,循环停止并返回Date
。
为了让2009年的Advent开始,请使用:getAdvent(2009);
。它返回一个Date
对象,因此您仍然可以使用它的方法。
作为其方法的参考:https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date
答案 2 :(得分:1)
你可以通过在11月的最后一个星期四增加3天来获得Advent Sunday,这看起来更简单:
function getAdventDay(y){
var advent=new Date();
advent.setHours(0,0,0,0);
//set the year:
if(typeof y!='number')y=advent.getFullYear();
//get the last day of november:
advent.setFullYear(y,10,30);
//back up to the last thursday in November:
while(advent.getDay()!==4)advent.setDate(advent.getDate()-1);
//add 3 days to get Sunday:
advent.setDate(advent.getDate()+3);
return advent;
}
getAdventDay(2013)
/*
Sun Dec 01 2013 00:00:00 GMT-0500 (Eastern Standard Time)
*/
答案 3 :(得分:0)
我喜欢这些挑战,这里是如何通过递归来完成的。首先我找到第四个星期天。然后我只是保持缩短7天,直到我有其他3.变量firstSunday,secondSunday,thirdSunday和4thSunday - 包含日期。
编辑:我相信我误会了,但 firstSunday 变量将是您要查找的日期。
<强> Demo 强>
<强>的Javascript 强>
var year = 2011;//new Date().getFullYear();
var sevenDays = (24*60*60*1000) * 7;
var foundDate;
var findClosestSunday = function(date){
foundDate = date;
if (foundDate.getDay() != 0)
findClosestSunday(new Date(year,11,date.getDate()-1));
return foundDate;
}
var fourthSunday = findClosestSunday(new Date(year, 11, 23));
var thirdSunday = new Date(fourthSunday.getTime() - sevenDays);
var secondSunday = new Date(fourthSunday.getTime() - sevenDays *2);
var firstSunday = new Date(fourthSunday.getTime() - sevenDays *3);
console.log
(
firstSunday,
secondSunday,
thirdSunday,
fourthSunday
);
答案 4 :(得分:0)
const getFirstAdvent=function(y){
const firstAdvent=new Date(y,11,3);
firstAdvent.setDate(firstAdvent.getDate()-firstAdvent.getDay());
return firstAdvent;
};
alert(getFirstAdvent(2020));
答案 5 :(得分:-1)
从epoch开始,Javascript以毫秒为单位。一周内有1000 * 60 * 60 * 24 * 7 = 604800000毫秒。
您可以在Javascript中创建一个新日期,该日期偏离了知道日期:
var weekTicks, christmas, week0, week1, week2, week3;
weekTicks = 604800000;
christmas = new Date(2013, 12, 25);
week0 = new Date(christmas - weekTicks);
week1 = new Date(week0 - weekTicks);
week2 = new Date(week1 - weekTicks);
week3 = new Date(week2 - weekTicks);
了解这对您有何帮助。
此外,Date.getDay函数可以帮助您查找该月的哪一天是第一个星期日。