繁体   English   中英

jQuery Datepicker-根据当前时间设置MinDate

[英]JQuery Datepicker - setting MinDate based on current time

我正在使用JQuery Datepicker供客户选择交货日期。 我希望能够检查客户是否在中午之前订购,是否可以在第二天交货。 如果他们在中午之后订购,则无法提供第二天的送货服务,因此无法选择这一天。

我有一些代码可以检查当前时间,但是如何在顶部的设置中将此值添加到MinDate中呢?

谢谢!

 <div class="delivery-date"> <p> <label for="date">Select a date for delivery below:</label> <input id="date" type="text" name="properties[delivery-date]" readonly="readonly" style="background:white; width:30%" class="required" data-error="Please choose a delivery date." /> </p> </div> <script> jQuery(function() { jQuery("#date").datepicker( { // minDate: new Date(((new Date).getTime() + 49 * 60 * 60 * 1000) ), minDate: checkBeforeNoon, maxDate: "+2M", // show up to 2 months dateFormat: 'dd/mm/yy', beforeShowDay: available_delivery_dates } ); }); /*========== check time ==========*/ // if time before 12pm, offer next day delivery function checkBeforeNoon(nextDayDelivery){ var startTime = '12:00 AM'; var endTime = '12:00 PM'; var curr_time = getval(); if (get24Hr(curr_time) > get24Hr(startTime) && get24Hr(curr_time) < get24Hr(endTime)) { // before 12pm - next day delivery available var nextDayDelivery = '+1d'; } else { // after 12pm - next day delivery unavailable var nextDayDelivery = '+2d'; } function get24Hr(time){ var hours = Number(time.match(/^(\\d+)/)[1]); var AMPM = time.match(/\\s(.*)$/)[1]; if(AMPM == "PM" && hours<12) hours = hours+12; if(AMPM == "AM" && hours==12) hours = hours-12; var minutes = Number(time.match(/:(\\d+)/)[1]); hours = hours*100+minutes; console.log(time +" - "+hours); return hours; } function getval() { var currentTime = new Date() var hours = currentTime.getHours() var minutes = currentTime.getMinutes() if (minutes < 10) minutes = "0" + minutes; var suffix = "AM"; if (hours >= 12) { suffix = "PM"; hours = hours - 12; } if (hours == 0) { hours = 12; } var current_time = hours + ":" + minutes + " " + suffix; return current_time; } } /*========== Make sundays always unavailable ==========*/ function available_delivery_dates(date) { var sunday = 0; // unavailable for delivery var mon = 1 var tue = 2; var wed = 3; var thu = 4; var fri = 5; var sat = 6; var day_of_week = date.getDay(); var not_sun = day_of_week > 0; if(not_sun){ var day = date.getDate(); return [true, '']; } else{ // all else - do not allow return [false, ' ', 'Delivery is unavailable on this day']; } } </script> 

您已经完成了。 您只需要向正在检查是否为正午的函数添加返回值即可。 如果您想告知客户现在可以一天发货,则可以通过在功能中添加日志来做到这一点。 这是修改后的代码:

http://jsfiddle.net/graphicfreedom/L3tz8243/1/

function checkBeforeNoon(nextDayDelivery){
      var startTime = '12:00 AM';
      var endTime = '12:00 PM';
      var curr_time = getval();

  if (get24Hr(curr_time) > get24Hr(startTime) && get24Hr(curr_time) < get24Hr(endTime)) {
      // before 12pm - next day delivery available
      var nextDayDelivery = '+1d';
      $("#log").html('Next day delivery available! Order before noon!'); //show response to user
  } else {
     // after 12pm - next day delivery unavailable
     var nextDayDelivery = '+2d';
      $("#log").html('Next day delivery NOT available! It is already past noon :('); //show response to user
  }
    return nextDayDelivery;
}

另外,您可以轻松分离功能。 它更易于阅读,并且您始终可以从函数中调用函数。 希望这可以帮助!

if-else块中,在nextDayDelivery之前删除var ,因为您将重新声明它。 然后返回nextDayDelivery 同样,在getVal()方法中修复丢失的分号也是一个好主意。

function checkBeforeNoon(nextDayDelivery) {

    var startTime = '12:00 AM';
    var endTime = '12:00 PM';

    var curr_time = getval();


    if (get24Hr(curr_time) > get24Hr(startTime) && get24Hr(curr_time) < get24Hr(endTime)) {
        // before 12pm - next day delivery available
        nextDayDelivery = '+1d';  // REMOVE var FROM HERE

    } else {
        // after 12pm - next day delivery unavailable
        nextDayDelivery = '+2d';  // REMOVE var FROM HERE
    }

    function get24Hr(time) {
        var hours = Number(time.match(/^(\d+)/)[1]);
        var AMPM = time.match(/\s(.*)$/)[1];
        if (AMPM == "PM" && hours < 12) hours = hours + 12;
        if (AMPM == "AM" && hours == 12) hours = hours - 12;

        var minutes = Number(time.match(/:(\d+)/)[1]);
        hours = hours * 100 + minutes;
        console.log(time + " - " + hours);
        return hours;
    }

    function getval() {
        // ADD MISSING SEMI-COLONS ON THE FOLLOWING 3 LINES
        var currentTime = new Date();
        var hours = currentTime.getHours();
        var minutes = currentTime.getMinutes();

        if (minutes < 10) minutes = "0" + minutes;

        var suffix = "AM";
        if (hours >= 12) {
            suffix = "PM";
            hours = hours - 12;
        }
        if (hours == 0) {
            hours = 12;
        }
        var current_time = hours + ":" + minutes + " " + suffix;

        return current_time;
    }

    return nextDayDelivery;  // ADD RETURN STATEMENT
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM