有一个显示月份的代码(从当前的+11开始),之后,根据所选月份,显示本月的日期(3月从当前日期到3月底,即从18日到31日,4 月 1 日至 30 日等),问题就在这里,严重的不一致:
jQuery(document).ready(function() {
Data = new Date();
Year = Data.getFullYear();
Month = Data.getMonth();
Day = Data.getDate();
var arr_month = [
'Январь',
'Февраль',
'Март',
'Апрель',
'Май',
'Июнь',
'Июль',
'Август',
'Сентябрь',
'Октябрь',
'Ноябрь',
'Декабрь',
];
var elem = document.getElementById('scrollbar1');
for (i = 0; i < 12; i++) {
var new_month = new Date(Year, Month + i, Day).getMonth();
var label = document.createElement('label');
label.className = 'item01';
label.name = ('item01_label_name');
$(label).attr('id', 'item01_label');
var snap = document.createElement('snap');
snap.className = 'item01_snap';
snap.innerText = arr_month[new_month];
var inp = document.createElement('input');
inp.setAttribute('type', 'radio');
inp.value = new_month;
$(inp).attr('id', 'item01_radio');
inp.name = ('item01_radio');
$(inp).attr('required', true);
label.appendChild(snap);
label.appendChild(inp);
elem.appendChild(label);
}
$('input:radio[name="item01_radio"]').change(function() {
$('input:radio[name="item01_radio"]').parent().removeClass('label_main_selected');
$('input:radio[name="item01_radio"]:checked').parent().toggleClass('label_main_selected');
var month_check = $('input:radio[name="item01_radio"]:checked').val();
if (month_check == Month) {
var days = new Date(Year, (Data.getMonth() + 1), 0).getDate();
var days_remained = days - Day;
response = days_remained;
} else {
response = new Date(Year, (month_check + 1), 0).getDate();
}
document.getElementById('scrollbar2').innerHTML = "";
var elem = document.getElementById('scrollbar2');
console.log(response);
for (i = 1; i < response + 1; i++) {
if (month_check == Month) {
new_date = new Date(Year, Data.getMonth(), Day + i).getDate();
full_date = new Date(Year, Data.getMonth(), Day + i);
} else {
new_date = new Date(Year, month_check, i).getDate();
full_date = new Date(Year, month_check, i);
}
var label = document.createElement('label');
label.className = 'item11';
label.name = ('item11_label_name');
$(label).attr('id', 'item11_label');
var snap = document.createElement('snap');
snap.className = 'item11_snap';
snap.innerText = new_date;
var inp = document.createElement('input');
inp.setAttribute('type', 'radio');
inp.value = full_date;
$(inp).attr('id', 'item11_radio');
inp.name = ('item11_radio');
$(inp).attr('required', true);
label.appendChild(snap);
label.appendChild(inp);
elem.appendChild(label);
}
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<main>
<div class="grid_container">
<div class = "wrapper">
<div class="item0" id="scrollbar1">
</div>
<div class="item1" id="scrollbar2">
</div>
</div>
</div>
</main>
该变量
full_date似乎显示了正确的年份和月份Sun Apr 05 2020 00:00:00 GMT+0300(莫斯科标准时间) 但是如果您看一下,4 月 5 日是星期四,而不是星期日。如果叉子
if(month_check == Month)转到else,那么四月、五月、六月、七月、八月、九月、十月的响应变量将分别等于 31、31、31、31、30、30、31、31(通常, 周期 4 从 4 月开始到 31 2 到 30 等),这与这些月的天数不对应。
我知道这是一个大问题,但也许有人会立即注意到这个错误。您可以批评代码,只需充分询问,指出不好的语气和替代解决方案!!!
错误在于隐式类型转换。该变量
month_check是字符串类型。并且执行
response = new Date(Year, (month_check + 1), 0).getDate();没有达到你的预期。类似的东西response = new Date(2020, '21', 0).getDate();,与month_check = '2'。