需要一些帮助。我差不多完成了,但过去常常过滤日期。例如,我不希望昨天的日期显示为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>
感谢您提前的时间。
答案 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
可能无效,具体取决于您的日期。