如何实现WordPress WooCommerce结账日期选择器字段周末自动修正为周一?
问题描述
我们公司做活动业务,基于WordPress WooCommerce使用Checkout Field Editor插件添加了两个日期选择器字段date_1和date_2。需求是date_2默认自动设置为date_1所选日期的3天后,但当前存在问题:如果计算后的date_2是周末(即用户选择的date_1是周末前3天),需要将date_2的默认值改为下周一(因为周末不提供服务)。
以下是当前网站functions.php文件中使用的代码:
<script type="text/javascript"> (function($){ $('#date_1').on('change', function(){ var date = $(this).datepicker('getDate'); date.setDate(date.getDate()+3); var dd = date.getDate(), mm = date.getMonth()+1, yy = date.getFullYear(), dd = parseInt(dd)<10 ? '0'+dd : dd, mm = parseInt(mm)<10 ? '0'+mm : mm, selected_date = dd+'/'+mm+'/'+yy; $('#date_2').datepicker("option", "minDate", selected_date); $('#date_2').datepicker('setDate', selected_date); $('#date_2').datepicker("option", "maxDate", selected_date); }); })(jQuery, window, document) </script>
修改方案
核心思路是在计算出date_1+3天的日期后,判断该日期是否为周末,若为周末则调整到下周一。JavaScript的Date.getDay()方法会返回0(周日)到6(周六)的数值,利用这一点即可实现判断。
修改后的完整代码如下:
<script type="text/javascript"> (function($){ $('#date_1').on('change', function(){ var date = $(this).datepicker('getDate'); date.setDate(date.getDate()+3); // 判断是否为周末,调整到下周一 var dayOfWeek = date.getDay(); if(dayOfWeek === 6){ // 周六,加2天到周一 date.setDate(date.getDate()+2); } else if(dayOfWeek === 0){ // 周日,加1天到周一 date.setDate(date.getDate()+1); } var dd = date.getDate(), mm = date.getMonth()+1, yy = date.getFullYear(), dd = parseInt(dd)<10 ? '0'+dd : dd, mm = parseInt(mm)<10 ? '0'+mm : mm, selected_date = dd+'/'+mm+'/'+yy; $('#date_2').datepicker("option", "minDate", selected_date); $('#date_2').datepicker('setDate', selected_date); $('#date_2').datepicker("option", "maxDate", selected_date); }); })(jQuery, window, document) </script>
关键修改说明
- 在计算出
date_1+3天的日期后,新增了对日期周数的判断:- 如果是周六(
getDay() === 6),将日期再加2天,直接跳转到下周一 - 如果是周日(
getDay() === 0),将日期再加1天,跳转到下周一
- 如果是周六(
- 其余逻辑保持不变,确保
date_2的最小、最大日期和选中值都同步调整后的日期
内容的提问来源于stack exchange,提问作者Peter Bisset
相关产品推荐
相关产品推荐

