我使用日期选择器来设置开始和结束日期。日期范围应该每天向前移动一个为期两周的滑动窗口。
我的代码可以使用,但我想将它重构为更易于维护的内容。我可以使用哪些技术或工具来改进此代码?
var challenge_start = new Date(2015,04,04);
var challenge_end = new Date(2015,06,12);
var range_start;
var range_end;
var today = new Date();
var dd = today.getDate();
var mm = today.getMonth()+1; //January is 0!
var yyyy = today.getFullYear();
if(today<challenge_start) {
range_start=challenge_start;
range_end=challenge_start;
}
else if(today>challenge_start && today<challenge_end) {
if(mm==5) {
if(dd<18) {
range_start=challenge_start;
range_end=today;
}
else {
range_start=today.setDate(today.getDate()-14);
range_end=today;
}
}
else if(mm=6) {
if(dd<29) {
range_start=today.setDate(today.getDate()-14);
range_end=today;
}
else {
range_start=today.setDate(today.getDate()-14);
range_end=challenge_end;
}
}
else if(mm==7) {
if(dd<12) {
range_start=today.setDate(today.getDate()-14);
range_end=challenge_end;
}
else {
range_start=challenge_end;
range_end=challenge_end;
}
}
}
else if(today>challenge_end) {
range_start=challenge_end;
range_end=challenge_end;
}
$("#date").datepicker({
startDate: range_start,
endDate: range_end,
keyboardNavigation: false,
autoclose: true,
todayHighlight: true,
language: langdate,
disableTouchKeyboard: true
});
答案 0 :(得分:0)
我可能不明白你在努力做什么,但我很确定你不需要那些if(mm==x)
和if(dd=x)
陈述。
也许这就是你想要的:
var challenge_start = new Date(2015,04,04);
var challenge_end = new Date(2015,06,12);
function getDatePlusDays(origDate, days) {
var date = new Date(origDate.getTime());
date.setDate(date.getDate() + days);
return date;
}
function getClosestDateInRange(startDate, endDate, date) {
return (date < startDate) ? startDate
: ((date > endDate) ? endDate: date);
}
var today = new Date();
var range_start = getClosestDateInRange(challenge_start, challenge_end, getDatePlusDays(today, -14));
var range_end = getClosestDateInRange(challenge_start, challenge_end, today);