如何检查当前日期/时间是否超过了设定的日期/时间?

129

我想编写一个脚本,检查当前日期/时间是否已经超过了 2010年05月15日下午4点

我该如何使用 PHP 的 date() 函数来执行这个检查?

4个回答

250

自PHP >= 5.2.2以来,您可以使用DateTime类,如下所示:

if (new DateTime() > new DateTime("2010-05-15 16:00:00")) {
    # current time is greater than 2010-05-15 16:00:00
    # in other words, 2010-05-15 16:00:00 has passed
}

传递给DateTime构造函数的字符串将根据这些规则进行解析。


请注意,也可以使用timestrtotime函数。 查看原回答


6
时间戳有一些限制和缺陷,例如时间戳无法处理1970年之前和2038年之后的日期(请参见Ivar Koster的答案)。 - Steel Brain
1
我们经常看到滥用没有参数的new DateTime(),如果您正在使用UTC日期(应该是这样),请优先使用new DateTime("now", new DateTimeZone('UTC'))。这将防止您的应用程序在日期上出现误解的错误。我建议您将其存储在函数静态变量、类静态变量或运行进程中的其他位置... - Loenix
如果我们已经有一个DateTime对象,并且想知道它是否过去,因为我们不能像你建议的那样将一个对象传递给DateTime构造函数,那么我们应该使用它的getTimestamp()方法并将其与time()进行比较吗?@Salman A - user4271704
1
@user4271704 new DateTime('2010-05-15') 只是一个示例,可以是您之前初始化的任何DateTime对象。 - Salman A
假设 $object 是一个 DateTime 对象,我使用了 if (new DateTime() > $object) {} 但是它的工作结果不正确。但是 if (time() > $bject->getTimeStamp()) {} 的工作结果却是正确的。@Salman A - user4271704
显示剩余2条评论

80

此外还有DateTime类,它实现了比较运算符的函数。

// $now = new DateTime();
$dtA = new DateTime('05/14/2010 3:00PM');
$dtB = new DateTime('05/14/2010 4:00PM');

if ( $dtA > $dtB ) {
  echo 'dtA > dtB';
}
else {
  echo 'dtA <= dtB';
}

1
这个函数实现了什么功能? - still_dreaming_1

6
请查看PHP的strtotime函数,将您设置的日期/时间转换为时间戳:http://php.net/manual/en/function.strtotime.php
如果strtotime不能正确处理您的日期/时间格式(例如,“下午4:00”可能有效但不是“在下午4点”),则需要使用字符串函数(例如substr)解析/纠正格式,并通过另一个函数(例如mktime)检索您的时间戳。
然后将生成的时间戳与当前日期/时间进行比较(if ($calulated_timestamp > time()) { /* date in the future */ }),以确定设置的日期/时间是过去还是未来。
建议阅读PHP文档中有关日期/时间函数的内容,并在卡住时回到此处并提供一些源代码。

请查看Ivar Koster的答案。 - Steel Brain

1
date_default_timezone_set('Asia/Kolkata');

$curDateTime = date("Y-m-d H:i:s");
$myDate = date("Y-m-d H:i:s", strtotime("2018-06-26 16:15:33"));
if($myDate < $curDateTime){
    echo "active";exit;
}else{
    echo "inactive";exit;
}

$myDate等于string (0) ""时,这肯定行不通。 - Nikola Petkanski

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接