编辑:
@Bogdan,这个剧本只执行一次,就在第二天开始前一个小时就开始了,这很奇怪,也是因为当天两次约会的start
时间不同。但是,这两项任命都是在第二天确定的。
所以基本上我的脚本没有在下一个小时检查即将到来的约会,而只是为明天设定的约会,并在那些约会开始前一小时发送电子邮件。混乱。另外,如果以Y-m-d H:i
格式检查时间,那么秒是不是很重要?或者我错过了什么?
OP:
我使用laravel cronjob和scheduler设置了一些命令。我得到了所有需要工作的命令,除了一个。我有一个约会数据库,我在那里存储约会到期的时间戳。使用命令,我想在约会到期前一小时发送电子邮件。为此,我使用以下命令:
$schedule->command('appointment:hourly')->everyMinute();
所以它每分钟运行一次。在我的命令中,我有以下内容:
$date = Carbon::now()->addHours('1')->format('Y-m-d H:i');
$appointments = Appointment::latest('start')->date($date)->get();
因此它将日期设置为now()
,然后它会增加一个小时并检查数据库中的值。我的电子邮件永远不会发送(电子邮件脚本有效,因为我使用的是同一个脚本用于其他命令)。
我也尝试了以下内容:
$date = Carbon::now()->addHours('1')->format('Y-m-d H:i:s');
仍然没有。我的日期存储在数据库中,例如:
2016-01-25 09:00:00
所以它是否更好也检查以匹配秒,它应该工作。当我在视图中检查$date
时,它会返回2016-01-25 09:00
,例如。
任何指针都会受到赞赏。
顺便说一下,我的date()
功能。它只是根据start
列检查值:
public function scopeDate($query, $date)
{
if($date)
{
return $query->whereDate('start', '=', $date);
}
else {
return false;
}
}
PS。我应该提一件事。昨天晚上11点准时,我从上面的命令收到了两封电子邮件,说从一个小时开始约会。那些是今天开始的约会,但它们不会在00:00开始。所以我想用上面的命令,它不会检查今天的约会。我感到很困惑,但还没有想到这一点。
答案 0 :(得分:1)
这里有两件事需要考虑:
1。确保您在body {
-webkit-transition: background-image 0.2s ease-in-out;
transition: background-image 0.2s ease-in-out;
}
文件中设置了正确的时区,因为这可能是在错误的时间发送约会通知电子邮件的原因。
2. 从执行cron作业到执行config/app.php
语句的时间,时间可能与您预期的完全不同(这不是确定的,是可能会受到代码执行和/或服务器在执行时加载的影响。因此时间可能是Carbon::now()
而不是09:00:01
,在这种情况下,您的情况将不再是真实的(这是其偶尔工作的另一个原因)。
为了确保时差不影响条件,你应该检查当前时间一小时或更短的时间,这当然要求你设置某种< em> marker ,可以让您知道通知是否已发送。此外,由于09:00:00
仅比较日期和时间字符串的日期部分,因此还需要处理检查时间。由于Eloquent没有提供任何方法,您可以将hour
和minute
MySQL函数与whereDate
结合使用,如下所示:
whereRaw