Javascript,推进日期范围

时间:2015-04-25 21:27:28

标签: javascript jquery date

我使用日期选择器来设置开始和结束日期。日期范围应该每天向前移动一个为期两周的滑动窗口。

我的代码可以使用,但我想将它重构为更易于维护的内容。我可以使用哪些技术或工具来改进此代码?

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
});

1 个答案:

答案 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);

jsfiddle