【问题标题】:How can I efficiently compare two DateTimes and check if they are the same day?如何有效地比较两个 DateTime 并检查它们是否是同一天?
【发布时间】:2013-09-20 08:19:08
【问题描述】:

我有两个 DateTime 对象

$lastDate = $entity->getDate(); // is a DateTime with same format as $today
$today    = \DateTime::createFromFormat('!Y-m-d', date('Y-m-d'));

现在我想检查这两个日期是否是同一天,或者它们是否相隔一天以上(但这也应包括 $lastDay 是昨天晚上 11 点,$today 是新的凌晨 1 点天)。

到目前为止我所拥有的是

$diff = $today->diff($lastDate);

if($diff->days > 0) {
    $return = false;
} else {
    $return = true;
}

问题是:如果日期相距超过 24 小时,这似乎可以计算,如果是这种情况,则仅设置为 true

我可以考虑通过比较$date->format('d'); 来比较它们,但这意味着我也要检查年份和月份。我知道这将完美无缺,但这将是一个五线左右。

所以我的问题是:有没有更有效的方法来检查这个?像diff() 这样的任何操作都可以给我一个单行的结果吗?

【问题讨论】:

    标签: php datetime datediff


    【解决方案1】:

    根据您的最新更改,这行不通:

    $votedToday = ($today->format('Y-m-d') == $lastDate->format('Y-m-d'));
    

    我同意 DateTime 没有提取日期部分的方法有点奇怪,类似于 MySQL,但如果您要使用 format,为什么不跳过 diff 并进行比较两个 DateTime 对象的完整日期的格式化日期字符串?

    为了进一步简化,您可以使用:

    $votedToday = ($lastDate->format('Y-m-d') == date('Y-m-d'));
    

    假设您只使用$today 来确认$lastDate 是否在今天。

    【讨论】:

    • 不错的方法,不错的精益思想。谢谢!
    猜你喜欢
    • 2011-01-31
    • 1970-01-01
    • 1970-01-01
    • 2014-03-22
    • 1970-01-01
    • 1970-01-01
    • 2020-07-17
    • 1970-01-01
    相关资源
    最近更新 更多