0

Currently, I have this custom function:

var $myBadDates = new Array(<?php foreach($aryDates as $disabledate) { echo ' "$disabledate",'; } echo " 1"; ?>);
// Creates the array (The echo " 1"; is merely to close the array and will not affect the outcome
function checkAvailability(mydate) {
    var $return = true;
    var $returnclass = "available";
    $checkdate = $.datepicker.formatDate('yy-mm-dd', mydate);
    for (var i = 0; i < $myBadDates.length; i++) {
        if ($myBadDates[i] == $checkdate) {
            $return = false;
            $returnclass = "unavailable";
        }
    }
    return [$return, $returnclass];
}

The datepicker section goes as such:

$(function () {
    //To enable End Date picker only when Start Date has been chosen (And to disable all dates prior of said date)
    var end = $('#enddate').datepicker({
        numberOfMonths: 3,
        stepMonths: 3,
        beforeShowDay: checkAvailability
    });
    // Defining a function, because we're binding this to two different events
    function enableEnd() {
        end.attr('disabled', !this.value.length) // Enable the end input element if the first one has anything in it
        .datepicker('option', 'minDate', this.value); // Set the minimum date to the date in the first input
    }
    //End of function
    // Datepicker
    $('#startdate').datepicker({
        numberOfMonths: 3,
        stepMonths: 3,
        beforeShowDay: checkAvailability,
        minDate: +1,
        onSelect: enableEnd // Call enableEnd when a date is selected in the first datepicker
    }).bind('input', enableEnd); // Do the same when something is inputted by the user
    //hover states on the static widgets
    $('#dialog_link, ul#icons li').hover(

    function () {
        $(this).toggleClass('ui-state-hover');
    });
});
//End of Function​

What I do is from my SQL DB, i use a custom function that changes a start date and an end date to an array of dates, which is then pushed into a single array and used to disable the said dates.
The second datepicker is only enabled when a valid date from the first is returned as TRUE.

The problem now is this:
I can block out all the dates that I have to. Great. But now, how do I block out weekends on top of this?
beforeShowDay: $.datepicker.noWeekends can't work because I'm already using a custom function. So, I have to customize my custom function even further. I can't use getDate() and show those > than 0 and < 7, so how can I tackle this?

Any help, answer of even a tip would help. I've been trying this out for sometime and I haven't gotten anywhere. Thanks.

1
  • getDate() won't work. Even creating a function that repeats the same procedure won't work. Commented Jan 26, 2011 at 10:36

1 Answer 1

1

Seems rather simple but I fail to understand why can't you use getDay() function:

function checkAvailability(d) {
    if (
        d.getDay() == 6 /* saturday */ ||
        d.getDay() == 0 /* sunday */
    ) {
        return [false,'unavailable unavailable-cuz-its-weekend'];
    }
    $checkdate = $.datepicker.formatDate('yy-mm-dd', d);
    for (var i = 0; i < $myBadDates.length; i++) {
        if($myBadDates[i] == $checkdate)
        {
            return [false, "unavailable"];
        }
    }
    return [true, "available"];
}
Sign up to request clarification or add additional context in comments.

1 Comment

I now see that you DO NOT have to use the formatDate function in the first place. mydate is a date and mydate.getDate() will work and so will mydate.getDay() -- 0-6 for sunday thru saturday.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.