有没有算法可以回答这个问题
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;
假设一年有 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;