我的脑子好像一片空白。
我必须写点东西来弄清楚今天的日/月组合适合哪个日期范围。
我有一组日期范围,它们是:
$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。
这是Mark B的答案的变化,但通过将其转换为纯粹的数字比较,使其更有效:
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实例,并使用简单的比较操作符,如>和<</p>
使用strtotime
创建UNIX纪元,然后使用内置的<
和>
操作符
$time_min = strtotime("17 January 2011");
$time_max = strtotime("30 April 2011");
if ($time >= $time_min && $time < $time_max)
{
echo "Time is within range!";
}