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


115

我正在尝试编写一个脚本,该脚本将检查当前日期/时间是否已超过 05/15/2010 at 4PM

如何使用PHP的date()函数执行此检查?

Answers:


228

由于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
我们经常会看到没有参数的新DateTime()滥用,如果您正在使用UTC日期(如您所愿),则更喜欢使用new DateTime(“ now”,new DateTimeZone('UTC'))。这样可以防止您的应用在日期中出现容易理解的错误。我建议您将其存储在函数静态变量,类静态或运行过程中的其他位置...
Loenix

如果我们已经有一个DateTime对象,并且想知道它是否已经过去,因为我们无法按照您的建议将对象传递给DateTime构造函数,该怎么办?我们应该使用它的getTimestamp()并将其与time()进行比较吗?@Salman A
user4271704

@ user4271704 new DateTime('2010-05-15')仅仅是一个示例,可以是您先前初始化的任何DateTime对象。
Salman A

假设$object我使用的是DateTime对象,if (new DateTime() > $object) {}它的工作方式有误。但if (time() > $bject->getTimeStamp()) {}工作正确。@Salman A
user4271704

77

还有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-function将您设置的日期/时间转换为时间戳:http : //php.net/manual/en/function.strtotime.php

如果strtotime无法正确处理日期/时间格式(“ 4:00 PM”可能会正常工作,但“下午4点”则无法工作),则需要使用字符串函数,例如substr,解析/更正格式并通过以下方式获取时间戳另一个功能,例如mktime

然后将所得时间戳记与当前日期/时间(if ($calulated_timestamp > time()) { /* date in the future */ })进行比较,以查看设置的日期/时间是过去还是将来。

我建议您阅读有关日期/时间功能的PHP文档,并在遇到问题时返回此处并附上一些源代码。


参见Ivar Koster的答案
Steel Brain

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.