簡體   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