Как сказал Сэм, вы можете избежать смены года, просто сравнив другие сезоны текущего года.Если это не один из других, это должен быть перевернутый.
function getSeason(d) {
// Default to today's date
d = d || new Date();
// Zero time part for comparison
d.setHours(0,0,0,0);
// Use the current year for comparisons
var year = d.getFullYear();
// Default season if others fail
var season = 'Autumn';
// Data for seasons, use ECMAScript month numbering
var seasons = [
{name: 'Spring',
start: [0, 14], // Jan 14
end: [4, 6]}, // May 06
{name: 'Summer',
start: [4, 7], // May 07
end: [9, 7]} // Oct 07
];
// Set season
seasons.forEach(s => {
let sStart = new Date(year, ...s.start);
let sEnd = new Date(year, ...s.end);
if (d >= sStart && d <= sEnd) {
season = s.name;
}
})
return season;
}
console.log('Today is : ' + getSeason());
[new Date(2019,0, 1), // 1 Jan Autumn
new Date(2019,0,21), // 21 Jan Spring
new Date(2019,5,30) // 30 Jun Summer
].forEach(d => {
console.log(d.toDateString()+ ': ' + getSeason(d));
});
Код может быть более кратким, используя новые функции:
function getSeason(d = new Date()) {
d.setHours(0,0,0,0);
let year = d.getFullYear();
let seasons = [
{name: 'Spring', start: [0, 14], end: [4, 6]},
{name: 'Summer', start: [4, 7], end: [9, 7]}
];
return (seasons.find(s => d >= new Date(year, ...s.start) && d <= new Date(year, ...s.end)) || {name:'Autumn'}).name;
}
console.log('Today is : ' + getSeason());
[new Date(2019,0, 1), // 1 Jan Autumn
new Date(2019,0,21), // 21 Jan Spring
new Date(2019,5,30) // 30 Jun Summer
].forEach(d => {
console.log(d.toDateString()+ ': ' + getSeason(d));
});