我使用的是名为FuelPhp的MVC框架,我知道这是一个老的框架,但这是应用程序运行的基础。
试图发送一封电子邮件,比较两个日期,所以如果网站被关闭,记录在 $down_time
五分钟过去了,记录在案。$last_checked_time
然后就应该发送电子邮件。我遇到的问题是代码似乎停在这行上 $difference = $last_checked_time->diff($down_time);
而从来没有打过if语句。基本上,我想做的就是检查是否有 $last_checked_time
大于 $down_time
5分钟。没有任何错误被记录下来,所以我不确定问题出在哪里,我真的很感激你的帮助,谢谢你。
$down_time = DateTime::createFromFormat('Y-m-d H:i:s', $website->down_at);
$last_checked_time = DateTime::createFromFormat('Y-m-d H:i:s', $website->last_checked);
$difference = $last_checked_time->diff($down_time);
if ($difference->format("a") > 0 || $difference->format("h") > 0 || $difference->format("m") >= 5) {
Cli::write("Emailing: " . $website->url . " is offline");
$notify_emails = array();
foreach ($services as $service)
{
$service_id = $service->service_id;
if (in_array($service_id, $dept_emails))
{
$notify_emails[] = $dept_emails[$service_id];
}
}
$message = "Hi," . $website->url . " has been down since " . $website->down_at . ".";
$email = Model_Mail::send_email($dept_emails, "" . $website->url . " is down", $message);
$result = DB::update('clients_websites')
->set(array(
'down_email_sent' => date('Y-m-d H:i:s')
))
->where('id', '=', $website->id)
->execute();
}
当调用 format
你需要使用 %
符号前 格式化字符串:
if ($difference->format("%a") > 0 || $difference->format("%h") > 0 || $difference->format("%m") >= 5) {
还有: %m
是月。如果你想要分钟,你应该用 %i
.
编辑
另外,再次强调 DateInterval
类可能会很烦人,因为你要检查很多属性,只处理秒级可能会更容易。
$diff_in_seconds = $last_checked_time->getTimestamp() - $down_time->getTimestamp();
if($diff_in_seconds >= 300){
//Do something
}