如何解决仅在工作日和特定时间为真
我将 PHP 7.4.1
和 Laravel Framework 6.20.12
与 carbon
库一起使用。
如果某个日期跨越 true
变量,我想从星期一到星期五返回 $sendPost
仅一次。我的定时任务每 5 Minutes
运行一次。
我试过了:
<?PHP
require 'vendor/autoload.PHP';
use Carbon\Carbon;
function checkMsgFired() {
$Now = Carbon::Now();
// $Now = Carbon::createFromFormat('d/m/Y H:i:s',"19/1/2021 14:43:00");
$lastSendPost = Carbon::createFromFormat('d/m/Y H:i:s',"18/1/2021 14:43:00"); // the posting has already happended today
$post = array();
$post['Frequency'] = "MoToFr"; // send only from monday to friday at a specific date once
$post['sendPost'] = Carbon::createFromFormat('H:i:s',"14:40:00"); // when the post should be send
if($post['Frequency'] === "MoToFr") {
// if it is a WEEKDAY
if($Now->dayOfWeek !== Carbon::SATURDAY or $Now->dayOfWeek !== Carbon::SUNDAY) {
// $lastPosting didn't happen today
if(!$lastSendPost->isToday() && $Now->gt($post['sendPost'])){
return true;
}
else{
return false;
}
} else {
return false;
}
}
}
var_dump(checkMsgFired());
不过,发帖时间好像不行。如何检查事件是否已在准确时间触发一次?
此外,是否有更简单的版本来编码?
感谢您的回复!
解决方法
可能是什么?当时间在 14:40 和 14:45 之间时,这将为您提供 true,只要您的 cron 作业每 5 分钟运行一次,它应该大部分是正确的。
<?php
require 'vendor/autoload.php';
use Carbon\Carbon;
function checkMsgFired() {
$now = Carbon::now();
$frequency = "MoToFr";
$sendPost = Carbon::createFromFormat('H:i:s',"14:40:00");
if ($frequency === "MoToFr") {
if ($now->isWeekday()) {
return $now->between($sendPost,$sendPost->addMinutes(5));
}
}
return false;
}
var_dump(checkMsgFired());
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。