在美国,基督教的主显节在1月2日至1月8日(包括1月8日)之间的星期天举行。我在试着用Javascript找出它的日期。它看起来应该可以工作,但我什么也得不到:
var startDate = new Date(2018,0,2);
var endDate = new Date(2018,0,8);
var epiphanyUS = new Date();
while (startDate < endDate){
if (startdate.getDay() === 0){
epiphanyUS = startdate;
}
startDate.setDate(startDate.getDate() + 1);
}
console.log("Epiphany is" + epiphanyUS.format("MM-DD-YYYY"));
发布于 2018-06-18 01:56:11
我修复了几个拼写错误,并显式地定义了所有变量。我认为您的while循环逻辑也可以更清晰。我不知道您是否在使用外部JS库(moment?),但.format不是我熟悉的方法。最后,我添加了一个年份变量,这样您就可以快速修改它,以便在任何其他年份找到顿悟。
var year = 2018;
var startDate = new Date(year,0,2);
var endDate = new Date(year,0,8);
var epiphanyUS;
while (startDate <= endDate) {
if (startDate.getDay() === 0) {
epiphanyUS = startDate;
break;
} else {
startDate.setDate(startDate.getDate() + 1);
}
}
console.log("Epiphany is " + epiphanyUS.toDateString());
发布于 2018-06-18 02:01:50
如果您更喜欢使用返回语句,也可以将逻辑包装在函数中。
var startDate = new Date(2018,0,2);
var endDate = new Date(2018,0,8);
function getEpiphanyUS (startDate, endDate) {
while (startDate <= endDate) {
if (startDate.getDay() === 0){
return startDate
}
startDate.setDate(startDate.getDate() + 1);
}
}
var epiphanyUS = getEpiphanyUS (startDate, endDate)
console.log("Epiphany is " + epiphanyUS.toDateString());
发布于 2018-06-18 01:55:54
找到匹配项时,应使用break
。它会让你走出这个循环。
var startDate = new Date(2018,0,2);
var endDate = new Date(2018,0,8);
var epiphanyUS; // you should also define the variable you intend to use later.
while (startDate <= endDate){ // inclusive of endDate
if (startDate.getDay() === 0){
epiphanyUS = startDate; // fix the typo. It's startDate, not startdate
break; // break when match is found.
}
startDate.setDate(startDate.getDate() + 1);
}
// check for presence and do stuff accordingly, like console.log
if(epiphanyUS) console.log("Epiphany is " + epiphanyUS);
https://stackoverflow.com/questions/50899047
复制相似问题