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

标签 javascript jquery datepicker

我正在使用 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;
}

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

关于javascript - JQuery Datepicker - 根据当前时间设置 MinDate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27961388/

相关文章:

php - FineUploader - 在页面加载时添加上传的文件

date - 在 Kotlin 中计算日期

javascript - 将 jQuery 对象扩展为我自己的对象

javascript - 用@解析JSON

javascript - 无法使用 JSON 来回转换字符串索引数组

javascript - 重新运行 Jquery 函数 onclick

javascript - 清理错误的 JSON 字符串

jquery - 如何重新计算 Firefox 扩展中元素的样式

angular - BsDatepicker 没有出现在子组件中(ngx-bootstrap)

javascript - 如何防止 jQuery 日期选择器在初始页面加载时弹出,但仍滚动到日期选择器文本框