是否有可以回答这个问题的算法

问题描述 投票:0回答:1

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

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

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

示例:

来自:1年级14年春季至:夏季14年2总天数= 150天

净天数= 40天

(顺便说一句,如果您打星露山谷,您可能会想到我是如何陷入这个问题的)

javascript algorithm calendar logic
1个回答
1
投票

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

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;
© www.soinside.com 2019 - 2024. All rights reserved.