На мой взгляд, мой ум пуст.
Я должен написать что-то, чтобы выяснить, какой диапазон дат на сегодняшний день сочетается с днем и днем.
У меня есть определенное количество диапазонов дат, которые:
$dateRanges = array( 1 => "16 January to 30 April", 2 => "1 May to 30 June", 3 => "1 July to 15 August", 4 => "16 August to 15 September", 5 => "15 September to 15 October", 6 => "16 October to 15 January" );
Все, что я пытаюсь вернуть, это ключ массива диапазона, в который вписывается текущая дата.
На данный момент все, что проходит через мою голову, я должен будет настроить большую инструкцию if, чтобы посмотреть текущую date('j')
и date('n')
и сопоставить результаты. Но, конечно, это довольно грязно и не очень эффективно?
Любые идеи о лучшем способе подхода к этой проблеме будут высоко оценены!
$today = time(); foreach ($dateRanges as $key => $range) { list($start, $end) = explode(' to ', $range); $start .= ' ' . date('Y'); // add 2011 to the string $end .= ' ' . date('Y'); if ((strtotime($start) <= $today) && (strtotime($end) >= $today)) { break; } }
$ key будет либо индексом совпадающего диапазона дат, либо значением null / false.
Это вариант ответа Марка Б, но он стал более эффективным, превратив это в чистое числовое сравнение:
function get_today () { $dateRanges = array( 0 => 116, // 16th Jan 1 => 501, // 1st May 2 => 701, // 1st July ..etc.. 3 => 816, 4 => 916, 5 => 1016 ); $today = (int) date('nd'); foreach ($dateRanges as $key => $date) { if ($today < $date) { $result = $key; break; } } return (empty($result)) ? 6 : $result; }
Возвращает целое число, соответствующее ключам в вашем массиве образцов
Создайте экземпляры DateTime для значений в массиве и используйте простые операторы сравнения, такие как> и <
Просто используйте strtotime
для создания эпохи UNIX, затем используйте встроенные операторы <
и >
.
http://www.php.net/manual/en/function.strtotime.php
$time_min = strtotime("17 January 2011"); $time_max = strtotime("30 April 2011"); if ($time >= $time_min && $time < $time_max) { echo "Time is within range!"; }
Затем вы можете просто расширить это, чтобы использовать массив заданных вами диапазонов.