如何在函数中合并函数

时间:2012-04-09 01:41:27

标签: javascript jquery arrays function range

我使用新日期创建的字符串日期更新了我的代码,并添加回if语句。但这并不是禁用字符串或范围。我也添加了datepicker代码。

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

});

3 个答案:

答案 0 :(得分:3)

在您的函数中,dates.push必须为date.push

答案 1 :(得分:1)

所以看起来你只想把功能分开:

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

这样您就可以在其他功能中使用createDateRangeunavailableDays

function someOtherFunction() {
    var someDateRange = createDateRange(new Date('1979-10-10'), new Date('1980-01-01'));
    … // stuff
}

答案 2 :(得分:0)

将函数放在另一个函数中没有问题,JavaScript基于此。你也可以有不同的功能,它也可以。

<强>更新

(考虑datedates问题已修复)

这似乎是问题所在(这是你的问题似乎真正的问题,而不是函数内部的函数!):createDateRange返回{{1}的数组对象,但您的其他版本(Date)是一个字符串数组(并且格式无法由var disabledDays = ["1963-3-10", ...解析)。

您当前的循环似乎正在尝试处理此字符串版本,并且它可以正常工作,但您希望new Date(str)始终忽略某些日期(据我了解您所说的内容)。所以,试试这个:

createDateRange

http://jsfiddle.net/t4ahF/4/