我需要比较两个日期以显示编辑链接,如果它是在发布后的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分钟。
任何建议都会很棒。
所有我真正需要的答案是布尔值(是/否)如果是,则显示剩下的小步片以显示要编辑的链接。
答案 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。
因此,请勿忘记date
和strtotime
。使用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秒。
您仍然需要检查代码是否可以假设两个值的时区都相同。