通过使用 PHP 和 FuelPHP 框架比较 2 个日期时间,在 5 分钟后发送电子邮件
Send an email after 5 minutes by comparing 2 datetimes using PHP and FuelPHP framework
我正在使用名为 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
时需要在format string前加一个%
符号:
if ($difference->format("%a") > 0 || $difference->format("%h") > 0 || $difference->format("%m") >= 5) {
还有,%m
是月。如果你想要分钟,你应该使用 %i
.
编辑
同样,DateInterval
class 可能很烦人,因为您必须检查许多属性,只处理秒数可能更容易:
$diff_in_seconds = $last_checked_time->getTimestamp() - $down_time->getTimestamp();
if($diff_in_seconds >= 300){
//Do something
}
我正在使用名为 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
时需要在format string前加一个%
符号:
if ($difference->format("%a") > 0 || $difference->format("%h") > 0 || $difference->format("%m") >= 5) {
还有,%m
是月。如果你想要分钟,你应该使用 %i
.
编辑
同样,DateInterval
class 可能很烦人,因为您必须检查许多属性,只处理秒数可能更容易:
$diff_in_seconds = $last_checked_time->getTimestamp() - $down_time->getTimestamp();
if($diff_in_seconds >= 300){
//Do something
}