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

Chr*_*ris 36 php

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

干杯.

Cfr*_*eak 97

if( strtotime($database_date) > strtotime('now') ) {
...
Run Code Online (Sandbox Code Playgroud)

  • @ChrisR我认为在这种特殊情况下它使代码更清晰,因为我已经使用strtotime来转换数据库日期.这主要是个人偏好,time()也可以. (3认同)
  • 你更喜欢'strtotime('now')`超过`time()`的任何特殊原因? (2认同)
  • 对于所有用例,这不是_ideal_.如果比较**相同**日期的`strtotime`,并说`$ database_date`只是'01-01-2018`,那么`'now'`时间将是_after_ it因为它包括时间.你会用'strtotime(date('Ymd'))`来解决这个问题. (2认同)

kai*_*ser 29

这是所有可能检查的列表......

"约会过日了吗?"

获得价值的可能方法

$date = strtotime( $date );

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

性能测试结果(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  |
+---------------------+---------------+
Run Code Online (Sandbox Code Playgroud)

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' )
);
Run Code Online (Sandbox Code Playgroud)

结论

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

  • 忘了提到这是用PHP 5.4.7运行的 (3认同)

Sco*_*own 5

我想设定一个特定的日期,因此已在2013年12月2日之前使用此日期做事

if(mktime(0,0,0,12,2,2013) > strtotime('now')) {
    // do stuff
}
Run Code Online (Sandbox Code Playgroud)

0,0,0是午夜,12是一个月,2是白天和2013是一年。