首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用php日期数组在datepicker中没有禁用日期

问使用php日期数组在datepicker中没有禁用日期
EN

Stack Overflow用户
提问于 2020-08-02 22:02:06
回答 1查看 85关注 0票数 0

我试图从wordpress中自定义post类型的date字段中获取日期,然后将日期传输到数组中。然后将该数组转换为js对象。js对象在带有beforeShowDay的数据报警器中使用,但它不起作用。我收到了数据记录,但是没有一个日期是无法确定的。

如果我这样做了:

代码语言:javascript
复制
print_r($dates);

在php部分中,我得到:数组( => 20200829 1 => 20200821 )

这是我的代码:

代码语言:javascript
复制
    $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(); 
?>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-03 17:39:40

您从WP查询中得到的日期看起来是"20200829",但在您的数据交换代码中,您试图将它们与'yy-mm-dd'格式的日期进行比较,即它们看起来类似于"2020-08-29“。这些是不同的格式,所以它们永远不会匹配。

你可以:

  1. 通过使用如下格式的WP_Query yymmdd,更改数据报考比较中的日期格式以匹配yymmdd日期:
代码语言:javascript
复制
    var date_to_check = jQuery.datepicker.formatDate('yymmdd', date);
  1. 从WP_Query重新格式化你的约会..。通常我不会建议这样做,但更常见的是日期分隔符,如果您需要在代码的其他地方使用这些日期,您可以从一开始就按要求格式化它们。

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

代码语言:javascript
复制
foreach ($dates as $d){
    $date = DateTime::createFromFormat('Ymd', $d);
    $formatted_dates[]  = $date->format('Y-m-d');
}

你可以像以前一样在你的数据机上使用它,例如:

代码语言:javascript
复制
<?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":

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63221448

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档