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

问题描述

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

如果某个日期跨越 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());

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...