关于php / javascript中的日期选择器

时间:2014-09-17 21:35:28

标签: javascript php jquery html datepicker

我有一个javascript jquery日期选择器,它只允许您根据数据库中的天数选择日期,并且只允许您选择当天(如果它不在数据库中作为假日) 。周末也被禁用。

我现在要做的只是允许用户从日期选择器上的数据库+1中选择一天。

我显然已经输入了我的数据库中输入的最新日期,加上一个日期,所以这是我想要选择的日期......但是如果第二天是残疾人日怎么办?从其他假日日期?我可以通过哪种方式解决这个问题呢?并且我的假期有条件吗?

我的javascript jquery日期选择器atm:

 <script type="text/javascript">

     //  Holiday Dates
    var unavailableDates = 
[<?php 

while($date = mysqli_fetch_assoc($execute)) {

        //  Populating javascript array with the dates from database
        echo '"' . $date = date('Y-n-j', strtotime($date['holiday_date'])) . '"';

        //  Adding a comma in array
    if ( $i < $number) {
                    echo ',';
    }
    $i ++;
}
    ?>
    ];

//  Entered Dates
var unavailableEnteredDates = 
[<?php 

while($dateEntered = mysqli_fetch_assoc($executeQuery)) {
    //  Populating javascript array with the dates from database
    echo '"' . $dateEntered = date('Y-n-j', strtotime($dateEntered['totalsDate'])) . '"';

    //  Adding a comma in array
    if ( $y < $number2) {
        echo ',';
    }
    $y ++;
}
?>
];

//  Concatenented array of 2 above
var allUnavailableDates = unavailableDates.concat(unavailableEnteredDates);

    //  Sets the no weekends and specified holiday dates
   function noWeekendsOrHolidays(date) {
    var noWeekend = jQuery.datepicker.noWeekends(date);
    return noWeekend[0] ? holidays(date) : noWeekend;
}

//  Gets the holidays
function holidays(date) {
    dmy = date.getFullYear() + "-" + (date.getMonth() + 1) + "-" + date.getDate();
    if ($.inArray(dmy, allUnavailableDates) == -1) {
        return [true, ""];
    } else {
        return [false, "", "Holiday Date"];
    }

}

//  Setting up the Date Picker
$(function() {
    $("#datepickerUser").datepicker({
        dateFormat: 'yy-m-d',
        beforeShowDay: noWeekendsOrHolidays,
        maxDate: "+0d"
    });
    $(function() { ("#testButton").datepicker("show") });

});

我提出的解决方案:

          //    Adding one to the day so we can display this
      $latestPlusOne = date('Y-n-j', strtotime( "$latestDate + 1 day" ));
      $availableTakingDate;

        //  This for loop will loop through the size of the array
        //  Each time it finds the date inside the array it will plus 1 to the date
        //  Otherwise, break out of the loop and the new date var will be an available one
for ($i = 0; $i <= count($dateArray); $i++) {
    if (in_array($latestPlusOne, $dateArray)) {

        $latestPlusOne = date('Y-n-j', strtotime( "$latestPlusOne + 1 day" ));
    } else {
        $availableTakingDate = $latestPlusOne;
        break;
    }
}
?>


<script type="text/javascript">

    //  Date :: wanted available
    var availableDate = <?php echo json_encode($availableTakingDate); ?>;

function displayDate(date) {
    dmy = date.getFullYear() + "-" + (date.getMonth() +1) + "-" + date.getDate();

    if (dmy == availableDate) {
        return [true, ""];

    } else {
        return [false, ""];
    }
}

//  Setting up the Date Picker
$(function() {
    $("#datepickerUser").datepicker({
        dateFormat: 'yy-m-d',
        beforeShowDay: displayDate,
        maxDate: "+0d"
    });
    $(function() { ("#testButton").datepicker("show") });

});

1 个答案:

答案 0 :(得分:1)

在您所在的国家/地区,datepicker绝不会知道假期。您需要实现自己的编程逻辑 - 通过年份定义您所在国家/地区的假期并计算第二天。如果在假日列表中找到第二天,请将日期延长至+1天。