[英]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.