【问题标题】:How to check if a date has passed如何检查日期是否已过
【发布时间】:2010-10-26 22:13:37
【问题描述】:

我正在尝试检查某个日期是否已过或是否是未来。如果 end_date 已经过去,那么我不希望它显示。 end_date 是 MySQL 时间戳。现在所有新闻文章都在显示,即使它们的 end_date 已经过去。这是我用来检查日期是否已过的代码:

function dateExp( $timestamp ){

   $exp = intval($timestamp);
   $today = intval( time() );


   if( $exp > today ) return true;
   else return false;

}

这是获取文章并显示它们的代码:

$qry = "select *    
         from   news
         where  display='Y'
         order by priority, date_added, title";

$news = _execQry($qry);


foreach( $news as $n )
{
   if( dateExp($n['end_date']) ){
      echo '<h3>'. $n['title'] .'</h3>';
      echo '<p>'. $n['story'] ;
      echo '<br />Added on '. dateFormat($n['date_added']) .'</p><br />';
   }

}

【问题讨论】:

    标签: php mysql time timestamp


    【解决方案1】:

    问题出在 dateExp 函数上。您缺少 $ 符号。因此,PHP 将 today 解释为常量 而不是 $today 这是您用来保存当前时间戳的变量..

    应该是这样的:

    function dateExp( $timestamp )
    {
    
    $exp = intval($timestamp);
    $today = intval( time() );
    
    
    if( $exp > $today ) return true;
    else return false;
    
    }
    

    事实上,你可以进一步简化功能:

    function dateExp($timestamp)
    {
       $timestamp = intval($timestamp);  // make sure we're dealing wit 'numbers'
       return ($timestamp > time());     // return TRUE if $timestamp is in the future
    }
    

    【讨论】:

    • 我修复了丢失的 $ 并尝试了您的简化版本,但我仍然遇到同样的问题
    【解决方案2】:

    我建议您修剪查询中的记录,这样您的程序就可以处理更少的数据。

    $qry = "选择 *
    来自新闻
    其中显示='Y' 和 end_date >= CurDate()
    按优先级、添加日期、标题排序";

    【讨论】:

    • 这也给了我同样的问题
    • 如果您的字段是 INT 而不是 DATE 或 DATETIME 字段,您也可以使用 end_date >= UNIX_TIMESTAMP()
    • 您的第一个建议奏效了。我刚刚错过了输入并添加了一个'
    猜你喜欢
    • 2017-05-31
    • 1970-01-01
    • 1970-01-01
    • 2015-07-10
    • 2011-12-03
    • 1970-01-01
    • 2017-09-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多