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

JQuery Datepicker - setting MinDate based on current time

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

我有一些代码可以检查当前时间,但是如何将这个值添加到顶部设置中的 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>

你已经做到了。您只需向检查是否是中午的函数添加一个 return。如果你想通知客户现在可以一天发货,你可以通过在你的函数中添加一个日志来实现。这是您修改的代码:

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,因为您将重新声明它。然后returnnextDayDelivery。另外,修复 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
}