Я пытаюсь выяснить, как исключить определенные даты из диапазона дат, который я настроил. Диапазон дат прекрасно работает следующим образом:php: исключить даты из диапазона дат
<?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
и исключите их из диапазона дат. Это вообще возможно? Я не хочу исключать выходные или такие, я могу это сделать, просто введите набор дат и исключите их из диапазона дат. Любые предложения будут ценны!
Update:
Как @ hek2mgl просили об этом, я добавил var_dump()
из get_field('test_select'));
var_dump(get_field('test_select'));
Результат:
array(2) { [0]=> string(8) "7/2/2010" [1]=> string(8) "
Полный код (не w orking):
$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' может быть 12 июля вам, но для меня это означает 7 декабря. И будьте осторожны, что неоднозначный ввод может привести к тому, что PHP примет неправильное значение. Если возможно, всегда используйте недвусмысленный формат даты внутри вашего кода. Если это невозможно, используйте 'DateTime :: CreateFromFormat()', с явно указанным форматом. – Spudley