假设一年中有四个季节,即春季,夏季,秋季和冬季。每个季节都有相等的编号。的天; 28.现在,我有只在特定季节夏季生长的这种植物。如果给定两个日期(格式:SS / DD / YY),则需要找到这些时间点之间的生长天数。我怎样才能做到这一点?我找到了获取两点之间的天数的公式,其
grossDays = (( toYear - fromYear )*112) + (( toSeason - fromSeason) *28) + ( toDay - fromDay )
如果春天= 1,夏天= 2,秋天= 3,冬天= 4。现在我需要的数字是植物可以生长的天数。
示例:
来自:1年级14年春季至:夏季14年2总天数= 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;