【问题标题】:Jquery date picker: disable next day after middayJquery日期选择器:中午后第二天禁用
【发布时间】:2016-02-22 21:19:17
【问题描述】:

我正在使用 Gravity Forms 和 Gravity Forms WooCommerce Product Add-Ons 插件为产品添加交货日期。

如果是中午 12 点之前,我希望客户能够选择第二天,但如果是中午之后则不能(产品仅在英国​​有售)。

这是我用来灰掉以前的日期并禁用星期天的方法,因为星期天没有送货:

<script type="text/javascript">
jQuery(document).ready(function($) { 
$(".datepicker").datepicker({ minDate:1, beforeShowDay: function(date) 
{ var day = date.getDay(); return [(day != 0), '']; } }); });
</script>

我找到了这个问题/答案:JQuery UI Datepicker Disbale Next Day After 12pm

但我不确定如何将我需要的代码与该解决方案隔离开来,仅在中午之后禁用次日交付,而不添加所有其他功能。如果有人能帮助我,我将不胜感激!

【问题讨论】:

    标签: jquery wordpress datepicker gravity-forms-plugin


    【解决方案1】:

    我将此策略用于本地取件日期选择器选项。它已经在多个客户网站上运行了几个月,没有任何关于准确性的投诉!

    <script>
    
        function partial_day_cutoff(date) {
    
          // default to no orders in the same day
          var minDate = 1;
    
          // get the current date stamp
          var date = new Date();
    
          // get the current hour (24 hr format)
          var current_hour = date.getHours();
    
          // if the current timestamp is greater than 12, 
          // change the minDate to no orders within this and the next day
          if( current_hour > 12 ) {
              minDate = 2;
          }
    
          return minDate;
    
        }
    
    
        jQuery(document).ready(function($){
    
          var minDate = partial_day_cutoff();
    
          $("#thedate").datepicker({
    
            minDate : minDate,
    
          });   
    
        });
    
    </script>
    

    【讨论】:

    • 这是我见过的最干净的方法之一。
    【解决方案2】:

    首先您需要获取英国的当前时间。 然后在您需要验证周日和中午时间之后。如果当前时间没问题(根据您的条件),那么您需要设置(可见)日期选择器。

    创建文件 getUKTime.php

        <?php 
        $userCountry = getCountryCode();
        if($userCountry=='GB') {
            date_default_timezone_set('Europe/London');
            $data=array("message"=>"success", "date"=>date("l Y-m-d g:i a"));
            echo json_encode($data);
        }else {
            $data=array("message"=>"The products are only available in the UK!");
            echo json_encode($data);    
        }
        /* get current user location iformation that either the user from UK or not */
        function getCountryCode() {
            $headers = array('Content-Type: application/json');
            $ip = $_SERVER["REMOTE_ADDR"];
            $deep_detect = TRUE;
            if ($deep_detect) {
              if (filter_var(@$_SERVER['HTTP_X_FORWARDED_FOR'], FILTER_VALIDATE_IP)){
                 $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
              }
              if (filter_var(@$_SERVER['HTTP_CLIENT_IP'], FILTER_VALIDATE_IP)){
                 $ip = $_SERVER['HTTP_CLIENT_IP'];
              }
            }
            $url = 'http://www.geoplugin.net/json.gp?ip='.$ip;
            $ch = curl_init();
            curl_setopt($ch, CURLOPT_URL, $url);
            curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true );
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
            $result1 = curl_exec($ch);
            curl_close($ch);        
            $data=json_decode($result1, true);
            return $data['geoplugin_countryCode'];
        }
        ?>
    

    在您的代码中编辑 jquery 函数

        <script>
            var midday = 0;// default value is 0 for diabled datepicker selction
            $.ajax({
                   url: "getUKTime.php",
                   type: "POST", data: {},
                   beforeSend: function (jqXHR, settings){if (jqXHR && jqXHR.overrideMimeType) {jqXHR.overrideMimeType("application/j-son;charset=UTF-8");}},
                   dataFilter: function (data) {var response = eval('(' + data + ')');return response;},
                   success: function (result) {
                       if(result.message=='success') {
                           var getDates=result.date.split(" ");
                           if(getDates[3]=='pm'){  midday=1;/*set it '1' to enable datepicker (UK time is in "pm" then datepicker will be enable)*/ }
                       }else{
                          midday=0;
                          alert(result.message); 
               }
                       $( "#Datepicker1").datepicker({
                           minDate: 0,
                           dateFormat: 'mm/dd/yy',
                           inline: true,
                           dayNamesMin: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
                           beforeShowDay: disableDays,
                        });
                   },
                   error: function (jqXHR, textStatus, errorThrown) {},
                   complete: function (jqXHR, textStatus){}
                }); 
    
            function disableDays(date){ 
                  if(midday==0) {return [(day > 0), ''];}
                  var day = date.getDay();
                  return [(day > 0), ''];
              }; 
        </script>
        <input type="text" id="Datepicker1" />
    

    【讨论】:

    • 怎么样?请添加描述和代码。或将此答案添加为评论。
    • user3625247 - 你能告诉我任何资源来帮助我吗?日期选择器已经可见,并且星期日已经变灰(就像过去的几天一样) - 它正在查询时间并根据我正在努力解决的查询设置第一个可用日期。
    • 您需要使用 asp 或 php 脚本来获取英国当前时间..您还可以获取用户时区 bt 用户可以更改时区..所以 thts 无效...
    • 太好了,谢谢!我会在星期一试一试:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-21
    • 1970-01-01
    • 1970-01-01
    • 2014-11-10
    • 1970-01-01
    相关资源
    最近更新 更多