如何基于ACF自定义日期选择器字段实现日期范围差异化显示?
解决ACF日期字段按年份匹配输出自定义范围格式的问题
直接上可运行的实现代码,核心是把ACF返回的日期字符串转成DateTime对象,再按年份匹配输出对应格式:
<?php // 获取ACF自定义字段值 $beginning_date = get_field('beginning_date'); $completion_date = get_field('completion_date'); // 先检查两个字段是否都有有效内容 if ($beginning_date && $completion_date) { // 按照ACF设置的返回格式(l, F j, Y)解析为DateTime对象 $start_dt = DateTime::createFromFormat('l, F j, Y', $beginning_date); $end_dt = DateTime::createFromFormat('l, F j, Y', $completion_date); // 确保日期解析成功 if ($start_dt && $end_dt) { // 对比年份,输出对应格式 if ($start_dt->format('Y') === $end_dt->format('Y')) { // 年份相同时:日/月 - 日/月/年 $range = $start_dt->format('j/m') . ' - ' . $end_dt->format('j/m/Y'); } else { // 年份不同时:输出完整的两个日期(可根据需求调整格式) $range = $start_dt->format('l, F j, Y') . ' - ' . $end_dt->format('l, F j, Y'); } // 输出最终结果 echo $range; } else { echo '日期格式解析失败'; } } else { echo '请填写完整的开始和结束日期'; } ?>
关键细节说明:
DateTime::createFromFormat('l, F j, Y', $date_str):严格对应ACF设置的返回格式,确保字符串能正确转成可操作的日期对象- 年份对比用
format('Y')获取四位年份字符串,避免数字类型转换的潜在问题 - 输出格式里的
j/m是不带前导零的日/月,要是需要带前导零(比如05/03),改成d/m即可
内容的提问来源于stack exchange,提问作者Mariana Scaravilli
相关产品推荐
相关产品推荐

