有没有算法可以回答这个问题

Is there an algorithm that answers this

假设一年有 4 个季节,即 spring 、夏季、秋季和冬季。每个季节都有相同的编号。的日子; 28. 现在,我有这种只在特定季节(夏季)生长的植物。如果给定两个日期(格式:SS / DD / YY),我需要找到这些时间点之间的生长天数。我怎样才能做到这一点?我找到了获取两点之间天数的公式,它

grossDays = (( toYear - fromYear )*112) + (( toSeason - fromSeason) *28) + ( toDay - fromDay )

如果 spring = 1,夏季 = 2,秋季 = 3,冬季 = 4。 现在我需要的数字是植物可以生长的天数。

示例:

来自:Spring 14 年 1 至:2 年级 14 年级暑假

总天数 = 150 天

净天数 = 40 天

(顺便说一下,如果你玩星露谷物语,你可能知道我是如何遇到这个问题的)

假设生长季节是输入的一部分,并且可以是多个季节,您可以使用以下函数:

function growingDays(begin, end, growingSeasons) {
    let [season1, day1, year1] = begin.match(/\d\d/g).map(Number);
    let [season2, day2, year2] = end.match(/\d\d/g).map(Number);
    let count = 0;
    // First date must not be later than second date. Otherwise return 0
    if ((year1 * 4 + season1) * 28 + day1 > (year2 * 4 + season2) * 28 + day2) return 0;
    while (season1 !== season2 || day2 < day1) {
        if (growingSeasons.includes(season2)) count += day2;
        day2 = 28;
        season2 = (season2 + 2) % 4 + 1; // previous season
        if (season2 === 4) year2--;
    }
    if (growingSeasons.includes(season1)) count += day2 - day1 + 1;
    return count + (year2 - year1) * 28 * growingSeasons.length;
}

console.log(growingDays("01/14/01", "02/14/02", [2]));

如果开始日期的那一天不应计入计数,则更改:

count += day2 - day1 + 1;

至:

count += day2 - day1;