过滤掉已经过去的日期

时间:2012-02-21 16:04:57

标签: php

需要一些帮助。我差不多完成了,但过去常常过滤日期。例如,我不希望昨天的日期显示为otpion。以下是我目前的代码。

 <select name="choose_date" id="choose_date">
 <?php
    if (isset($datesavailable) && is_array($datesavailable))
    {
      foreach($datesavailable as $val)
      {
        rsort($val);
        echo' <option value="'.$val.'">'.$val.'</option>\n';
      }
    }
  ?>
  </select>

感谢您提前的时间。

5 个答案:

答案 0 :(得分:1)

比较“今天”日期和给定日期的unix时间戳...(您的日期使用的格式不应该是关键的,因为strtotime会解析包含英文日期格式的字符串,并会尝试解析该格式进入Unix时间戳)

$date = "2004-02-29";
$unix_date = strtotime ($date);

if ($unix_date < time() ) 
{ 
  echo "date is before"; 
}
else 
{ 
  echo "date is after"; 
}

答案 1 :(得分:1)

最简单的方法是将日期转换为unix时间戳,并将其与time()或类似函数(取决于时区等)进行比较。您也可以尝试使用strtotime,但它依赖于语法。想象一下,你有正确的语法(类似Y-m-d H:i):

foreach ($datesavailable as $val) {
  if (!(strtotime($val) < time()))
    echo ' <option value="'.$val.'">'.$val.'</option>\n';
}

另外我无法理解为什么rsort($val);rsort是数组的反向排序函数,为什么要尝试对字符串进行排序?

最后,您应该考虑在输出之前过滤数据,例如选择数据。

答案 2 :(得分:1)

如果你有PHP 5.3,你可以使用DatePeriod类来生成可用的日期,比如你想只包括下个月:

$today = new DateTime();
$lastDay = clone $today;
$lastDay->add(new DateInterval("P1M1D"));
$period = new DatePeriod($today, new DateInterval("P1D"), $lastDay);

foreach ($period as $day)
{
    $formatted = $day->format('Y-m-d');
    print "<option value=\"{$formatted}\">{$formatted}</option>\n";
}

您必须使用date_default_timezone_set()

设置默认时区

答案 3 :(得分:1)

既然我们有更多的信息,我会给出另一个答案,但我会留下我的第一个答案,以防它可以帮助有其他问题的人。

鉴于新信息,为什么不在从数据库中提取日期时过滤旧日期?然后查询将是:

SELECT * FROM wp_location_date WHERE location=$id and location_date >= CUR_DATE() ORDER BY location_date

并且通过使用rsort()函数来判断您希望可用日期的顺序是否相反,以便查询可以通过在订单后添加DESC来立即修复此问题,如下所示:

SELECT * FROM wp_location_date WHERE location=$id and location_date >= CUR_DATE() ORDER BY location_date DESC

如果您仍然必须在PHP中执行此操作,则可以按以下方式过滤日期:

// Have this first line outside the foreach(), no need to set it multiple times.
$today = strtotime(date('Y-m-d'));
$valDate = strtotime($val);

if ($valDate >= $today)
{
    echo ' <option value="'.$val.'">'.$val.'</option>\n';
}

答案 4 :(得分:0)

正如戈登指出的那样,你应该在构建datesavailable时删除不受欢迎的日期,但是你可以在这里或之前使用以下简单的事情来删除:

if (strtotime($val) < strtotime('today')) {
   continue;
}

您可以更具体,但strtotime可能无效,具体取决于您的日期。