[英]Efficient way to check if current date is between 2 dates (years dont matter)
我的脑子似乎一片空白。
我必须写点东西来找出今天的日期/月份组合适合的日期范围。
我有一定数量的日期范围,它们是:
$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实例,并使用简单的比较运算符,例如>和<
只需使用strtotime
创建UNIX时代,然后使用内置的<
和>
运算符。
http://www.php.net/manual/zh/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!";
}
然后,您可以扩展它以使用您指定的范围数组。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.