46

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

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

$event['date']

这个显示格式是这样的:

2013-07-31例如。

现在,我需要做的是检查这个日期是否是当前日期的过去日期。

我怎样才能做到这一点?

4

4 回答 4

102

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

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

if($date < $now) {
    echo 'date is in the past';
}

注意:DateTime优先使用类,strtotime()因为后者仅适用于 2038 年之前的日期。阅读有关Year_2038_problem的更多信息。

于 2013-09-26T14:40:26.603 回答
20

您可以使用strtotime()time()

if (strtotime($event['date']) < time()) {
    // past date
}
于 2013-09-26T14:41:20.320 回答
10

@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';
}

输出将是

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

解决方案

$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';
    }
于 2017-09-14T07:33:59.640 回答
3
if (time() > strtotime($event['date']))
{
    // current date is greater than 2013-07-31 
}

strtotime使用这些规则解析日期字符串。

于 2013-09-26T14:41:27.010 回答