PHP检查当前日期是在设定日期之前还是之后

时间:2010-11-10 22:03:58

标签: php

我从数据库中提取日期,格式化为dd-mm-YYYY ...我要做的是检查当前日期,如果当前日期在数据库的日期之前,则需要打印数据库日期,如果它之后需要打印'继续'。

干杯。

10 个答案:

答案 0 :(得分:93)

if( strtotime($database_date) > strtotime('now') ) {
...

答案 1 :(得分:25)

以下列出了所有可能的支票......

  

“日期过了吗?”

获取值的可能方法

$date = strtotime( $date );

$date > date( "U" )
$date > mktime( 0, 0, 0 )
$date > strtotime( 'now' )
$date > time()
$date > abs( intval( $_SERVER['REQUEST_TIME'] ) )

性能测试结果(PHP 5.4.7)

我在1.000.000迭代上进行了一些性能测试并计算了平均值 - 有序最快到最慢。

+---------------------+---------------+
|        method       |     time      |
+---------------------+---------------+
|        time()       | 0.0000006732  |
|       $_SERVER      | 0.0000009131  |
|      date("U")      | 0.0000028951  |
|     mktime(0,0,0)   | 0.000003906   |
|   strtotime("now")  | 0.0000045032  |
| new DateTime("now") | 0.0000053365  |
+---------------------+---------------+

ProTip:只需查看功能的长度,即可轻松记住最快的内容。时间越长,功能越慢。

性能测试设置

针对上述每种可能性运行以下循环。我将这些值转换为非科学记数法,以便于阅读。

$loops = 1000000;
$start = microtime( true );
for ( $i = 0; $i < $loops; $i++ )
    date( "U" );
printf(
    '|    date("U")     | %s  |'."\n",
    rtrim( sprintf( '%.10F', ( microtime( true ) - $start ) / $loops ), '0' )
);

结论

time()似乎仍然是最快的。

答案 2 :(得分:4)

我想设定一个特定的日期,所以在2013年12月2日之前使用它来做事情

if(mktime(0,0,0,12,2,2013) > strtotime('now')) {
    // do stuff
}

0,0,0为午夜,12为月,2为日,2013为年。

答案 3 :(得分:3)

if (strtotime($date) > mktime(0,0,0))应该完成这项工作。

答案 4 :(得分:3)

如果您正在寻找通过MySQL执行此操作的通用方法,您可以简单地使用SELECT语句,并向其添加WHERE子句。

这将获取所有行的所有字段,其中存储在字段“date”中的日期在“now”之前。

SELECT * FROM table WHERE UNIX_TIMESTAMP(`date`) < UNIX_TIMESTAMP()

就我个人而言,我发现这种方法对于MySQL中的新手更加温和,因为它使用带有WHERE的标准SELECT语句来获取结果。显然,你可以通过列出它们而不是使用通配符(*)来仅获取相关的字段。

答案 5 :(得分:1)

我已经使用了这个,它的目的是:

if($date < date("Y-m-d") ) {
                echo "Date is in the past";}

BR

答案 6 :(得分:0)

使用strtotime将任何日期转换为unix时间戳并进行比较。

答案 7 :(得分:0)

if(strtotime($row['database_date']) > strtotime('now')) echo $row['database_date'];
else echo date("d-m-Y");

无需检查时间,因为如果它们在同一天它会以相同的方式显示相同的日期......

答案 8 :(得分:0)

仅限MySQL的解决方案将是这样的:

SELECT IF (UNIX_TIMESTAMP(`field`) > UNIX_TIMESTAMP(), `field`,'GO AHEAD') as `yourdate`
FROM `table`

答案 9 :(得分:0)

if(strtotime($db_date) > time()) {
  echo $db_date;
} else {
  echo 'go ahead';
}