Javascript 如何将函数合并到函数中

Javascript 如何将函数合并到函数中,javascript,jquery,arrays,function,range,Javascript,Jquery,Arrays,Function,Range,我用用新日期创建的字符串日期更新了代码,并将其添加回if语句中。但这并不是禁用字符串或范围。我还添加了日期选择器代码 function unavailableDays(date) { function createDateRange(first, last) { var dates = []; for(var j = first; j < last; j.setDate(j.getDate() + 7)) { dates.push(new Date(j.g

我用用新日期创建的字符串日期更新了代码,并将其添加回if语句中。但这并不是禁用字符串或范围。我还添加了日期选择器代码

function unavailableDays(date) {

function createDateRange(first, last) {
    var dates = [];
    for(var j = first; j < last; j.setDate(j.getDate() + 7)) {
        dates.push(new Date(j.getTime()));
    }
    var alwaysDisabled = [new Date("1963-3-10T00:00:00"), new Date("1963-3-17T00:00:00"), new Date("1963-3-24T00:00:00"), new Date("1963-3-31T00:00:00"), new Date("1965-9-18T00:00:00")];
    return dates.concat(alwaysDisabled);
}

var disabledDays = createDateRange(new Date("1978-8-10T00:00:00"), new Date("1978-11-5T00:00:00"));

var yy = date.getFullYear(), mm  = date.getMonth(), dd = date.getDate();
    for (i = 0; i < disabledDays.length; i++) {
    if($.inArray(yy + '-' + (mm+1) + '-' + dd,disabledDays) != -1 || new Date() < date) {
        return [false];
    }
}
    return [true];
}

$(document).ready(function (){
$('.selector').datepicker({
    inline: true,
    dateFormat: 'yy-mm-dd',
    constrainInput: true,
    changeYear: true,
    changeMonth: true,
    minDate: new Date(1940, 1-1, 1),
    maxDate: new Date(2011, 10-1, 24),
    beforeShowDay: unavailableDays,    
    onSelect: function(dateText, inst) {
            $("#img").attr("src", "http://www.example.com" + dateText + ".jpg"); 
         var chosenDates = $.datepicker.parseDate('yy-mm-dd', dateText);
         var backToString = $.datepicker.formatDate('MM dd' + ',' + ' yy', chosenDates);
         $('.info').html('You are viewing:' + '<br />' +
             backToString).addClass('background'); 
    } 
});
功能不可用天数(日期){
函数createDateRange(第一个、最后一个){
var日期=[];
对于(var j=first;j'+
backToString.addClass('background');
} 
});

}))

因此,您似乎只想分离出以下功能:

function createDateRange(first, last) {
    var date = [];
    for(var j = first; j < last; j.setDate(j.getDate() + 7))
        dates.push(new Date(j.getTime()));
    return date;
}

function unavailableDays(date) {
    var disabledDays = createDateRange(new Date("1978-08-10"), new Date("1978-11-05"));

    //date array to be disabled
    var disabledDays = ["1963-3-10", "1963-3-17", "1963-3-24", "1963-3-31", "1965-9-18"];
    var yy = date.getFullYear(), mm = date.getMonth(), dd = date.getDate();
    for (i = 0; i < disabledDays.length; i++) {
        if($.inArray(yy + '-' + (mm+1) + '-' + dd,disabledDays) != -1 || new Date() < date) {
            return [false];
        } 
    }
    return [true]; 
}

因此,您似乎只想分离出以下功能:

function createDateRange(first, last) {
    var date = [];
    for(var j = first; j < last; j.setDate(j.getDate() + 7))
        dates.push(new Date(j.getTime()));
    return date;
}

function unavailableDays(date) {
    var disabledDays = createDateRange(new Date("1978-08-10"), new Date("1978-11-05"));

    //date array to be disabled
    var disabledDays = ["1963-3-10", "1963-3-17", "1963-3-24", "1963-3-31", "1965-9-18"];
    var yy = date.getFullYear(), mm = date.getMonth(), dd = date.getDate();
    for (i = 0; i < disabledDays.length; i++) {
        if($.inArray(yy + '-' + (mm+1) + '-' + dd,disabledDays) != -1 || new Date() < date) {
            return [false];
        } 
    }
    return [true]; 
}

在另一个函数中包含一个函数是没有问题的,JavaScript基本上就是基于这个函数的。您也可以有单独的功能,它也可以工作

更新

(考虑到
日期
日期
的对比问题是固定的)

这似乎是问题所在(这才是您的问题所在,而不是函数内部的函数!):
createDateRange
返回一个
Date
对象数组,但您的另一个版本(
var disabledDays=[“1963-3-10”…
)是一个字符串数组(并且格式不能被
新日期(str)
解析)

您当前的循环似乎正在尝试处理这个字符串版本,它可以工作,但您希望
createDateRange
总是忽略某些日期(据我所知),所以,尝试以下方法:

function unavailableDays(date) {

    function createDateRange(first, last) {
        var dates = [];
        for(var j = first; j < last; j.setDate(j.getDate() + 7)) {
            dates.push(new Date(j.getTime()));
        }
        var alwaysDisabled = [new Date("1963-03-10T00:00:00"), new Date("1963-03-17T00:00:00"), new Date("1963-03-24T00:00:00"), new Date("1963-03-31T00:00:00"), new Date("1965-09-18T00:00:00")];
        return dates.concat(alwaysDisabled);
    }

    var disabledDays = createDateRange(new Date("1978-08-10T00:00:00"), new Date("1978-11-05T00:00:00"));
    for (i = 0; i < disabledDays.length; i++) {
        if(disabledDays[i].getTime() == date.getTime()) {
            return false;
        }
    }
    return true;

}

// Use `T00:00:00` after the date to set it as GMT, or
// dates can be interpreted as the previous day on some timezones.
var testDate1 = new Date('1978-08-10T00:00:00')
console.log("-- " + unavailableDays(testDate1)); // false
var testDate2 = new Date('1978-08-11T00:00:00')
console.log("-- " + unavailableDays(testDate2)); // true
var testDate3 = new Date('1978-08-17T00:00:00')
console.log("-- " + unavailableDays(testDate3)); // false
var testDate4 = new Date('1963-03-10T00:00:00')
console.log("-- " + unavailableDays(testDate4)); // false
功能不可用天数(日期){
函数createDateRange(第一个、最后一个){
var日期=[];
对于(var j=first;j

在另一个函数中包含一个函数没有问题,JavaScript基本上就是基于此。您也可以有单独的函数,它也可以工作

更新

(考虑到
日期
日期
的对比问题是固定的)

这似乎是问题所在(这才是您的问题所在,而不是函数内部的函数!):
createDateRange
返回一个
Date
对象数组,但您的另一个版本(
var disabledDays=[“1963-3-10”…
)是一个字符串数组(并且格式不能被
新日期(str)
解析)

您当前的循环似乎正在尝试处理这个字符串版本,它可以工作,但您希望
createDateRange
总是忽略某些日期(据我所知),所以,尝试以下方法:

function unavailableDays(date) {

    function createDateRange(first, last) {
        var dates = [];
        for(var j = first; j < last; j.setDate(j.getDate() + 7)) {
            dates.push(new Date(j.getTime()));
        }
        var alwaysDisabled = [new Date("1963-03-10T00:00:00"), new Date("1963-03-17T00:00:00"), new Date("1963-03-24T00:00:00"), new Date("1963-03-31T00:00:00"), new Date("1965-09-18T00:00:00")];
        return dates.concat(alwaysDisabled);
    }

    var disabledDays = createDateRange(new Date("1978-08-10T00:00:00"), new Date("1978-11-05T00:00:00"));
    for (i = 0; i < disabledDays.length; i++) {
        if(disabledDays[i].getTime() == date.getTime()) {
            return false;
        }
    }
    return true;

}

// Use `T00:00:00` after the date to set it as GMT, or
// dates can be interpreted as the previous day on some timezones.
var testDate1 = new Date('1978-08-10T00:00:00')
console.log("-- " + unavailableDays(testDate1)); // false
var testDate2 = new Date('1978-08-11T00:00:00')
console.log("-- " + unavailableDays(testDate2)); // true
var testDate3 = new Date('1978-08-17T00:00:00')
console.log("-- " + unavailableDays(testDate3)); // false
var testDate4 = new Date('1963-03-10T00:00:00')
console.log("-- " + unavailableDays(testDate4)); // false
功能不可用天数(日期){
函数createDateRange(第一个、最后一个){
var日期=[];
对于(var j=first;j