【发布时间】:2013-04-14 11:37:03
【问题描述】:
我试图弄清楚如何从我设置的日期范围中排除某些日期。日期范围可以正常工作,如下所示:
<?php $newBegin = new DateTime('6/30/2010');
$newEnd = new DateTime('7/12/2010');
$newEnd = $newEnd->modify( '+1 day' );
$newDaterange = new DatePeriod($newBegin, new DateInterval('P1D'), $newEnd);
foreach($newDaterange as $newDate){
echo $newDate->format("jnY") . " ";
} ?>
这样打印结果:
3062010 172010 272010 372010 472010 572010 672010 772010 872010 972010 1072010 1172010 1272010
但是客户需要从每个日期范围中排除某些日期,所以我最好像这样输入日期:7/2/2010 7/4/2010 8/4/2010 并将它们排除在日期范围之外。这是可能吗?我不想排除周末之类的,我可以这样做,只需输入一组日期并将它们从日期范围中排除。任何建议将不胜感激!
更新:
根据@hek2mgl 的要求,我添加了var_dump() 的get_field('test_select'));
var_dump(get_field('test_select'));
结果:
array(2) { [0]=> string(8) "7/2/2010" [1]=> string(8) "
完整代码(不工作):
$newBegin = DateTime::createFromFormat('n/j/Y', '6/30/2010');
$newEnd = DateTime::createFromFormat('n/j/Y', '7/12/2010');
$newEnd = $newEnd->modify( '+1 day' );
$exclude = array();
// stores dates like so: 7/2/2010 7/3/2010
foreach(get_field('test_select') as $datestring) {
$exclude []= new DateTime($datestring);
}
$newDaterange = new DatePeriod($newBegin, new DateInterval('P1D'), $newEnd);
foreach($newDaterange as $newDate){
if(!in_array($newDate, $exclude)) {
echo $newDate->format("jnY") . " ";
}
}
【问题讨论】:
-
一条建议——不要使用可能不明确的日期格式。
7/12/2010对你来说可能是 7 月 12 日,但对我来说这意味着 12 月 7 日。并且要注意不明确的输入会导致 PHP 假设错误的值。如果可能,请始终在代码中使用明确的日期格式。如果不可能,请使用DateTime::CreateFromFormat(),并明确指定格式。
标签: php html date datepicker