检查当前日期是否在两个日期之间的有效方法(年份无关紧要)


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实例,并使用简单的比较操作符,如>和<</p>

使用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!";
}