Javascript 条件语句-确定季节

Javascript 条件语句-确定季节,javascript,conditional-statements,Javascript,Conditional Statements,我正在做一个练习,根据特别提供的日期确定季节。下面是我的代码,它的工作,但必须有一个更好的方式。。。 我想对我的解决方案使用条件语句。 输入为: 月份作为字符串 日期作为数字 赛季开始日期 春天3月20日, 夏季6月21日, 秋天9月22日, 冬季12月21日 任何帮助都将不胜感激 let month = 'Dec'; let day = 23; if(month === 'Apr' || month === 'May') { console.log('Spring');

我正在做一个练习,根据特别提供的日期确定季节。下面是我的代码,它的工作,但必须有一个更好的方式。。。 我想对我的解决方案使用条件语句。 输入为:

  • 月份作为字符串
  • 日期作为数字
赛季开始日期 春天3月20日, 夏季6月21日, 秋天9月22日, 冬季12月21日

任何帮助都将不胜感激

let month = 'Dec';
let day = 23;

if(month === 'Apr' || month === 'May') {
    console.log('Spring');
    } else if((day >= 20 && month === 'Mar') || (day < 21 && month === 'Jun')) {
        console.log('Spring');
    } else if(month === 'Jul' || month === 'Aug') {
        console.log("Summer");
    } else if((day >= 21 && month === 'Jun') || (day < 22 && month === 'Sept')){      
        console.log("Summer");
    } else if (month === 'Oct' || month === 'Nov') {
        console.log("Autumn");
    } else if ((day >= 22 && month === 'Sept') || (day < 21 && month === 'Dec')) {
        console.log("Autumn");
    } else if (month === 'Oct' || month === 'Nov') {
        console.log("Winter");
    } else if((day >= 21 && month === 'Dec') || (day < 20 && month === 'Mar')){
        console.log("Winter");
    }

let month='Dec';
让天=23;
如果(月=='Apr'| |月=='May'){
console.log('Spring');
}否则如果((日>=20月=='3')| |(日<21月=='6')){
console.log('Spring');
}否则如果(月=='Jul'| |月=='Aug'){
控制台日志(“夏季”);
}如果((日>=21和月=='Jun')| |(日<22和月=='Sept')){
控制台日志(“夏季”);
}如果(月=='10月| |月==='11月'){
控制台日志(“秋季”);
}否则如果((日>=22月=='9月')| |(日<21月=='12月')){
控制台日志(“秋季”);
}如果(月=='10月| |月==='11月'){
控制台日志(“冬季”);
}否则如果((日>=21和月=='Dec')| |(日<20和月=='Mar')){
控制台日志(“冬季”);
}

如果您可以将日期转换为“MMDD”格式的字符串,您可以执行以下操作:

var月数=[“xxx”、“一月”、“二月”、“三月”、“四月”、“五月”、“六月”、“七月”、“八月”、“九月”、“十月”、“十一月”、“十二月”];
函数getMMDD(mth,dy){
返回月份.indexOf(mth).toString().padStart(2,“0”)+dy.toString().padStart(2,“0”);
}  
函数查找季节(mth,dy){
设d=getMMDD(mth,dy);
如果(d<“0320”){返回“冬季”;}
如果(d<“0621”){返回“弹簧”;}
如果(d<“0921”){返回“Summer”;}
如果(d<“1222”){返回“秋”;}
回归“冬天”;
}
控制台日志(findSeason(“1月”,25日));
控制台日志(findSeason(“2月25日”);
控制台日志(findSeason(“Mar”,25));
console.log(findSeason(“Apr”,28));
控制台日志(findSeason(“May”,25));
console.log(findSeason(“Jun”,25));
console.log(findSeason(“Jul”,25));
控制台日志(findSeason(“8月25日”);
console.log(findSeason(“Sep”,25));
控制台日志(findSeason(“10月25日”);
console.log(findSeason(“Nov”,25));

控制台日志(findSeason(“Dec”,25))您可以创建一个包含每个季节、每个季节结束的对象,然后查找日期大于所提供日期的“查找第一个季节”(如果找不到,则在第一个季节周围画一个圆圈)

问题是您需要将“Dec”和23转换为日期对象。一种简单的方法是创建一个包含所有月份的数组,当您需要查找季节时,在该数组中获取该月份的索引,并像使用新日期一样使用它。

var year=newdate().getFullYear();
风险值月份=[“一月”、“二月”、“三月”、“四月”、“五月”、“六月”、“七月”、“八月”、“九月”、“十月”、“十一月”、“十二月”];
变量季节={
“冬季”:新的日期(年,2,20),
“春天”:新的日期(年,5,21),
“夏季”:新的日期(年8月22日),
“秋天”:新的日期(年11月21日)
};
控制台日志(getSeason(“1月”,20日));
控制台日志(getSeason(“2月20日”);
控制台日志(getSeason(“Mar”,20));
控制台日志(getSeason(“4月”,20日));
控制台日志(getSeason(“5月20日”);
控制台日志(getSeason(“Jun”,20));
控制台日志(getSeason(“7月20日”);
控制台日志(getSeason(“8月20日”);
控制台日志(getSeason(“9月20日”);
控制台日志(getSeason(“10月20日”);
控制台日志(getSeason(“11月20日”);
控制台日志(getSeason(“12月20日”);
控制台日志(getSeason(“12月22日”);
功能和季节(月、日){
var指数=月。指数(月);
var newDate=新日期(年、指数、日);
用于(季节中的var键){
if(newDate}
还有另一种使用条件句的方法也很有效(见下文)。非常感谢你的建议

let month = 'Apr';
let date = 3;

switch (month) {
    case "Mar":
        if (date >= 1 && date <= 19) {
            console.log("Winter");
        } else if (date >= 20 && date <= 31) {
            console.log("Spring");
            break;
        }
    case "Apr":
        if (date >= 1 && date <= 30) {
            console.log("Spring");
            break;
        }
    case "May":
        if (date >= 1 && date <= 31) {
            console.log("Spring");
            break;
        }
    case "Jun":
        if (date >= 1 && date <= 20) {
            console.log("Spring");
        } else if (date >= 21 && date <= 30) {
            console.log("Summer");
            break;
        }
    case "Jul":
        if (date >= 1 && date <= 31) {
            console.log("Summer");
            break;
        }
    case "Aug":
        if (date >= 1 && date <= 31) {
            console.log("Summer");
            break;
        }
    case "Sep":
        if (date >= 1 && date <= 21) {
            console.log("Summer");
        } else if (date >= 22 && date <= 30) {
            console.log("Autumn");
            break;
        }
    case "Oct":
        if (date >= 1 && date <= 31) {
            console.log("Autumn");
            break;
        }
    case "Nov":
        if (date >= 1 && date <= 30) {
            console.log("Autumn");
            break;
        }
    case "Dec":
        if (date >= 1 && date <= 21) {
            console.log("Autumn");
        } else if (date >= 22 && date <= 31) {
            console.log("Winter");
            break;
        }
    case "Jan":
        if (date >= 1 && date <= 31) {
            console.log("Winter");
            break;
        }
    case "Feb":
        if (date >= 1 && date <= 29) {
            console.log("Winter");
            break;
        }
};
let month='Apr';
设日期=3;
开关(月){
“Mar”案:

如果(日期>=1&&date=20&&date=1&&date=1&&date=21&&date=1&&date=1&&date=22&&date=1&&date=1&&date=22&&date=1&&date=1&&date=1&&date=1&&date=1&&date=1&&date=1&&date=1&&date这回答了你的问题吗?我已经讲过了,从我所能看到的情况来看,接受的解决方案以及其他一些解决方案都不包括我关于如何在解决方案中实现数字输入的信息。我见过很多更复杂的解决方案,但它们似乎与我试图实现的完全不同:)@GeorgiPopov如何选择月份?该练习只是以字符串形式向您提供月份,还是会有一个下拉列表供您选择月份?很抱歉,我最初应该提供该信息。只是字符串形式。好的-我已更新代码,假设月份是一个3字符字符串,日期是一个数字。我只需以MMDD格式构造一个字符串,并像以前一样进行测试。您不打算在“MMDD”中添加
//转换为字符串吗格式化
part?这完全取决于月和日部分的确定方式-它们可能已经在日期对象中,也可能由用户选择或从innerHTML文本字符串派生。显示的所有OP都是“提供的日期”-这可能意味着许多不同格式中的一种。如果知道原始格式,那么,是的,我可以添加一个转换脚本。