Чтобы объяснить, почему ваш код не работает:
var today = new Date();
var tDate = today.getDate();
var tMonth = today.getMonth();
var startingDate = new Date();
// This sets the date to the first of the month, and sets sDate to a number
// that is the time value of the adjusted date
var sDate = startingDate.setDate(1);
// This sets the month to November and sMonth to the adjusted time value
var sMonth = startingDate.setMonth(10);
var endingDate = new Date();
// As above, this sets endingDate to 21 March and sets eDate and eMonth to numbers
var eDate = endingDate.setDate(21);
var eMonth = endingDate.setMonth(2);
// This will never be true after 1970-01-01 as you're comparing a months to a time values
if (tMonth >= sMonth && tMonth <= eMonth) {
if (tDate >= sDate && tDate <= eDate) {
Даже если при этом использовались правильные значения, логика не работает, даже для даты в диапазоне, вы сравниваете дату (номер дня), когда ее следует сравнивать, только если месяц - март или ноябрь, ни один другой месяц (согласно ответу Trincot).
Проще, если вы создадите даты для 21 марта и 21 декабря в текущем году, а затем посмотрите, попадает ли текущая дата в диапазон. Если это произойдет, это не зима. Если это не так, это зима. Я предположил, что диапазон включительно, скорректируйте даты, если это не так.
function isWinter(date = new Date()) {
var start = new Date(date.getFullYear(), 2, 21);
var end = new Date(date.getFullYear(), 11, 21);
return date > start && date < end;
}
[new Date(2018, 0, 1), // 1 Jan 2018, winter
new Date(2018, 2,21), // 21 Mar 2018, winter
new Date(2018, 5, 1), // 1 Jun 2018, not winter
new Date(2018,11,21), // 21 Dec 2018, winter
new Date() // Today ...
].forEach(d => console.log(`${d} is ${isWinter(d)?'not ':''}winter`));