使用PHP和FuelPHP框架比较2个日期的时间,5分钟后发送邮件。

问题描述 投票:0回答:1

我使用的是名为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();
                    }
php fuelphp
1个回答
0
投票

当调用 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
}
© www.soinside.com 2019 - 2024. All rights reserved.