使用 php 日期数组在日期选择器中没有禁用日期

问题描述 投票:0回答:1

我试图从 WordPress 中自定义帖子类型的日期字段中获取日期,然后将日期传输到数组中。 然后将该数组转换为 js 对象。 该 js 对象在 beforeShowDay 的日期选择器中使用,但它不起作用。 我得到了日期选择器,但没有日期不可用。

如果我这样做:

print_r($dates);

在 php 部分我得到: 数组 ( [0] => 20200829 [1] => 20200821 )

这是我的代码:

    $dates = [];
    $args = array('post_type' => 'cus_booking');
    $loop = new WP_Query( $args ); 
    
    while ( $loop->have_posts() ) : $loop->the_post(); 
        the_excerpt(); 
        the_field('start_date');
        array_push($dates,get_field('start_date'));
    endwhile;
    
    ?>
    <input type="text" id="datepicker">

    <script>
        <?php
            $js_array = json_encode($dates);
            echo "var javascript_array = ". $js_array . ";\n";
        ?>
        jQuery(document).ready(function($) {
            $("#datepicker").datepicker({

                beforeShowDay: function(date){
                    var string = jQuery.datepicker.formatDate('yy-mm-dd', date);
                    return [ javascript_array.indexOf(string) == -1 ]
                }
        }
        );
        });
</script>

<?php
    wp_reset_postdata(); 
?>
php jquery wordpress datepicker
1个回答
0
投票

您从 WP-Query 返回的日期看起来像“20200829”,但在您的日期选择器代码中,您试图将它们与格式

'yy-mm-dd'
的日期进行比较,即它们看起来像“2020-08-29”。这些是不同的格式,因此它们永远不会匹配。

您可以:

  1. 使用格式
    WP_Query
    更改日期选择器比较中的日期格式,以匹配
    yymmdd
    日期,如下所示:
    var date_to_check = jQuery.datepicker.formatDate('yymmdd', date);
  1. WP_Query
    重新格式化日期...通常我不建议这样做,但更常见的是日期具有日期分隔符,如果您需要在代码中的其他位置使用这些日期,您可以直接格式化从一开始就按要求进行。

在这种情况下,您可以在 PHP 中重新格式化它们,如下所示:

foreach ($dates as $d){
    $date = DateTime::createFromFormat('Ymd', $d);
    $formatted_dates[]  = $date->format('Y-m-d');
}

您可以像以前一样在日期选择器中使用它,例如:

<?php echo "var dates_to_disable = ". json_encode($formatted_dates) . ";\n"; ?>
jQuery(document).ready(function($) {
    $("#datepicker").datepicker({
        beforeShowDay: function(date){
            var date_to_check = jQuery.datepicker.formatDate('yy-mm-dd', date);
            return [ dates_to_disable.indexOf(date_to_check) == -1 ];
        }
    });
});

我在答案中包含此选项的主要原因是强调PHP 和 jQuery 日期选择器有不同的方式来格式化日期字符串

例如在上面的代码中,要使日期看起来像“2020-08-29”:

© www.soinside.com 2019 - 2024. All rights reserved.