【问题标题】:PHP compare timePHP比较时间
【发布时间】:2011-09-03 18:18:30
【问题描述】:

如何在 PHP 中比较时间?

我想说的是:

$ThatTime ="14:08:10";
$todaydate = date('Y-m-d');
$time_now=mktime(date('G'),date('i'),date('s'));
$NowisTime=date('G:i:s',$time_now);
if($NowisTime >= $ThatTime) {
    echo "ok";
}

上面的代码打印不出来。我期待它。

【问题讨论】:

  • 想要完成什么?
  • 所有答案都假设两个时间都在同一天。根据您的应用程序,这可能没问题。其他人可能会遇到不同日期的时间,在这种情况下,您可能会得到错误的答案,除非您更改代码以同时考虑日期。

标签: php date time


【解决方案1】:
$ThatTime ="14:08:10";
if (time() >= strtotime($ThatTime)) {
  echo "ok";
}

使用DateTime 的解决方案(也考虑时区)。

$dateTime = new DateTime($ThatTime);
if ($dateTime->diff(new DateTime)->format('%R') == '+') {
  echo "OK";
}

http://php.net/datetime.diff

【讨论】:

  • 好的,但是 time() 会占用服务器的时间吗? -因为我每次都需要通过 date_default_timezone_set($TimeZone); 指定默认时区;
  • @DiegoP.:必须说,我以前没有意识到,但你是对的。但是,我使用DateTime 添加了另一个解决方案。
  • 请意识到:strtotime() 也考虑时区,所以第一个示例应该可以正常工作。 php.net/strtotime
  • 在 PHP 5.2 或更低版本的情况下,我建议对 UNIX 时间戳进行数字比较。毕竟它们是数字。
  • @NickTsai 最后一件事:我会用 PHP7.2 重新运行基准测试,结果更加“没关系”(因为 0.1ms 的差异更真实的 100 转换)。 gist.github.com/KingCrunch/8c9c3a39ccc4eb9a8623550ab0c3b62d 我添加了“没有实例化的日期时间”测试,因为在干净的架构中,您通常已经拥有实例,因此它会影响所有变体,因此应该被排除在外。
【解决方案2】:

要查看当前时间是否大于或等于 14:08:10,请执行以下操作:

if (time() >= strtotime("14:08:10")) {
  echo "ok";
}

根据您的输入源,确保考虑时区。

PHP time()PHP strtotime()

【讨论】:

    【解决方案3】:

    比较时间的简单方法是:

    $time = date('H:i:s',strtotime("11 PM"));
    if($time < date('H:i:s')){
         // your code
    }
    

    【讨论】:

      猜你喜欢
      • 2011-08-13
      • 1970-01-01
      • 1970-01-01
      • 2013-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多