仅在工作日和特定时间为真

True only on Weekdays and at a specific time

我将 PHP 7.4.1Laravel Framework 6.20.12carbon 库一起使用。

我想 return true 如果日期跨越 $sendPost 变量,从周一到周五只 一次。我的 cron-job 每 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());