比较两个日期/时间,找出两次php之间是否已经过了5分钟

时间:2010-06-10 00:32:52

标签: php date

我需要比较两个日期以显示编辑链接,如果它是在发布后的5分钟内,在PHP中。如果超过5分钟,则不要显示任何内容。

$answer_post_date = get_the_time("Y-m-d");

$current_date = date("Y-m-d");

$formated_current_date = strtotime($answer_post_date);
$formated_answer_post_date = strtotime($current_date);

此时我有两个值:

1274414400 ($formated_current_date)
1276056000 ($formated_answer_post_date)

我不知道接下来要做什么来检查当前日期/时间是否为>距答案发布日期5分钟。

任何建议都会很棒。

所有我真正需要的答案是布尔值(是/否)如果是,则显示剩下的小步片以显示要编辑的链接。

3 个答案:

答案 0 :(得分:2)

我对你需要做的事情的理解:

$delta = ($formated_current_date - $formated_answer_post_date) / 60; // in minutes
if ($delta < 5) {
    // show $delta
} 
编辑:像其他人指出的那样,仅凭这一点并不能解决所有问题。在我看来,对当前代码的最小改变是使用具有更高粒度的日期格式 - 例如"Y-m-d H:i:s"。与其他人指出的一样,这足以取决于帖子的日期与您的系统位于同一时区。

答案 1 :(得分:1)

你只处理日期,你怎么知道差异是5分钟?

无论如何,我会说使用默认PHP函数的大多数PHP代码至少有点破碎。问题是你,尽管unix时间戳存储了正确的时间点,但它不存储时区信息。请参阅here

因此,请勿忘记datestrtotime。使用datetime extension

在数据库中存储Unix时间戳和时区(按时区我的意思是Europe/Lisbon)。然后:

$tz = new DateTimeZone($timezone);
$answer_post_date = new DateTime("$timestamp");
$answer_post_date->setTimeZone($tz);
$current_date = new DateTime("now", $tz);

$diff = $current_date->diff($answer_post_date);
if ($diff->format("a") > 0 ||
        $diff->format("h") > 0 ||
        $diff->format("m") >= 5) {
    //more than 5 minutes have passed
}

当然,为了比较日期,您始终可以比较时间戳。

答案 2 :(得分:0)

我认为没有必要对字符串格式进行往返,无论它的效率和可靠性如何。

date()将默认调用您可以直接调用的time()并以秒为单位获取当前时间作为Unix纪元时间戳(这是您在{{1}中尝试最终得到的内容}})。您需要查看WordPress文档,根据帖子的值找到等效文档。

然后你可以做几秒钟的简单比较。 5分钟是300秒。

您仍然需要检查代码是否可以假设两个值的时区都相同。