PHP检查日期是否已过去某个格式的特定日期

Sat*_*000 28 php

我有一个php事件的日历,它查询数据库以获取日期.

我使用以下方式显示事件日期:

$event['date']
Run Code Online (Sandbox Code Playgroud)

这个显示格式为:

2013-07-31 例如.

现在,我需要做的是检查此日期是否是当前日期的过去日期.

我怎样才能做到这一点?

Ama*_*ali 68

您可以将日期与PHP的DateTime类进行比较:

$date = new DateTime($event['date']);
$now = new DateTime();

if($date < $now) {
    echo 'date is in the past';
}
Run Code Online (Sandbox Code Playgroud)

现场直播!


注意:使用DateTimeclass是首选​​,strtotime()因为后者仅适用于2038年之前的日期.阅读有关Year_2038_problem的更多信息.

  • 我强烈建议使用 `$date = DateTime::createFromFormat('Ymd', '2013-07-31');` 代替。OP的示例是ISO8601格式,因此DateTime类每次都正确“弄清楚”的可能性很大,但是对于不同的DateTime格式,指定要实例化的日期格式要安全得多,以确保没有隐藏转换中的错误。 (6认同)
  • 请注意,如果 `$event['date']` 是今天的日期(没有时间),这将认为它是“过去的”。要比较没有时间的日期,您可以执行 `$now = new DateTime(date('Ymd'));` (3认同)

new*_*rey 14

你可以使用strtotime()time():

if (strtotime($event['date']) < time()) {
    // past date
}
Run Code Online (Sandbox Code Playgroud)


Men*_*ats 5

@Satch3000 你已经接受了错误的答案作为正确的解决方案(@Amal Murali)

请查看输出,这里我输入了今天的日期,但它返回当前日期作为过去的日期。

<?php

/* Enter today date */
$date = new DateTime("09/14/2017");
$now = new DateTime();

print_r($date);

print_r($now);


if($date < $now) {
    echo 'date is in the past';
}
Run Code Online (Sandbox Code Playgroud)

输出将是

DateTime Object
(
    [date] => 2017-09-14 00:00:00.000000
    [timezone_type] => 3
    [timezone] => UTC
)
DateTime Object
(
    [date] => 2017-09-14 07:12:52.000000
    [timezone_type] => 3
    [timezone] => UTC
)
date is in the past
Run Code Online (Sandbox Code Playgroud)

解决方案

$Date1 = strtotime(date('Y-m-d', strtotime('2017-09-15') ) ).' ';
$Date2 = strtotime(date('Y-m-d'));

  if($Date1 < $Date2) {
        echo 'date is in the past';
    }
Run Code Online (Sandbox Code Playgroud)

  • 但是... 2017-09-14 00:00:00.000000 _is_ 之前 2017-09-14 07:12:52.000000。 (2认同)