【问题标题】:Regarding a Date Picker in php/javascript关于 php/javascript 中的日期选择器
【发布时间】:2014-09-17 21:35:28
【问题描述】:

我有一个 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") });

});

【问题讨论】:

  • 您应该粘贴最少的代码,以便用户可以帮助您解决问题。
  • 谢谢,我添加了我的 javascript

标签: javascript php jquery html datepicker


【解决方案1】:

datepicker 不可能知道您所在国家/地区的假期。您需要实现自己的编程逻辑 - 在您的国家/地区定义全年的假期并计算第二天。在假期列表中找到第二天时,将 date 扩展为 +1 天。

【讨论】:

  • 我已经实现了自己的假期系统,因此“来自数据库”哈哈。
  • 是的,但您需要将其实现为选项“maxDate”。而不是 maxDate: "+0d" 使用 maxDate: "+1" 或 "+2" 等。 maxDate 允许数值或日期对象,这比字符串参数 "+0d" 更适合您的情况。见api.jqueryui.com/datepicker/#option-maxDate
  • 知道了,我在 php 中使用了一个 for 循环来检查我的 Date+1 与一组不可用的日期,如果它存在 +1 到我的 Date。然后就在 beforeShowDay 中使用一个函数从 PHP 将 Date 设置为我的变量。谢谢!将代码放在主帖中查看
  • 不错。只是一个小提示 - 我不建议使用 strtotime() ,因为它是本地格式感知功能,这意味着它可能在一个设置上工作但可能在另一台服务器上不起作用 - 取决于环境语言环境设置。 PHP 的 mktime(...) 绝对是更好的选择。看看有多少开发者对底部 cmets 中的 strtotime() 感到困惑:php.net/manual/en/function.strtotime.php
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-23
  • 1970-01-01
相关资源
最近更新 更多