为WordPress日历日期选择器转换日期格式
解决WordPress事件日期与Datepicker格式不匹配的问题
首先看你的代码,问题出在PHP生成日期格式的部分——你现在输出的是'r'格式(RFC 2822标准,比如Thu, 20 May 2020 00:00:00 +0000),而Datepicker需要的是MM/DD/YYYY(比如05/20/2020)这种美式日期格式。
直接修改日期格式生成逻辑
只需要把PHP里的date_format的格式参数从'r'改成'm/d/Y'就行:
m:两位数字的月份(01-12)d:两位数字的日期(01-31)Y:四位数字的年份(比如2020)
修改后的PHP数组填充部分代码:
$my_array[] = array( 'Title' => $post->post_title, 'Date' => date_format(date_create(get_field('data-event')), 'm/d/Y') );
简化代码的小技巧
其实你不需要把时间转成@开头的Unix时间戳再创建Date对象,直接把get_field('data-event')的结果传入date_create就可以(假设ACF的data-event字段存储的是标准日期格式,比如Y-m-d或者可被PHP识别的日期字符串)。如果更想简化,甚至可以用date()函数直接处理:
'Date' => date('m/d/Y', strtotime(get_field('data-event')))
把PHP数组转为符合JS格式的数组
为了避免手动拼接JS代码出错,推荐用json_encode直接把PHP数组转成合法的JS对象数组:
// 先完成数组填充... echo '<script>var events = ' . json_encode($my_array) . ';</script>';
这样生成的events数组会自动和你示例中的JS格式完全一致,每个对象的Date字段就是"05/20/2020"这样的字符串,直接可以用new Date()包裹使用(或者有些Datepicker组件支持直接传入这种格式的字符串)。
完整的修改后代码示例
<?php $my_array = array(); // the query $args=array( 'post_type' => 'eventos', 'order'=>'ASC' ); $posts = get_posts( $args ); if ( $posts ) { foreach ( $posts as $post ) { $my_array[] = array( 'Title' => $post->post_title, 'Date' => date('m/d/Y', strtotime(get_field('data-event'))), ); } } // 输出为JS变量 echo '<script>var events = ' . json_encode($my_array) . ';</script>'; ?>
如果你的Datepicker需要的是Date对象而不是字符串,还可以在JS里遍历转换:
events.forEach(event => { event.Date = new Date(event.Date); });
内容的提问来源于stack exchange,提问作者Eduardo Pedralli
相关产品推荐
相关产品推荐

