繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM