【问题标题】:How to run function on specific days of every week?如何在每周的特定日子运行功能?
【发布时间】:2020-02-04 16:49:58
【问题描述】:

基本上,我试图在每周的特定日期运行一个函数。我很难说出来,所以我会放一张图片,把我想跑步的日子划掉。尽管我会尽我最大的努力实现我想要实现的目标以及到目前为止我所做的一切。到目前为止,这一直是我的方法,首先我得到当前日期、月份的周数和工作日(周一为 1,周日为 7)。所以我只能在一月份得到它,但不能在接下来的几个月里得到它,因为它每个月都会重置。例如,我在 1 月 31 日运行该函数,然后在下个月它不应该在 2 月的第一周的星期一运行,而是应该在星期二和星期四运行,因为它已经按照模式在 1 月 31 日星期五运行了该函数上个月的。我可以知道我是否在正确的轨道上?如果有人有建议或建议,对我学习这个概念会有帮助。 (发送电子邮件是我要运行的功能)。

$date = date("Y-m-d");
$week = ceil( date( 'j', strtotime( $date ) ) / 5 );
$working_days = (date('N', strtotime($date)));
if($week  == 1 || $week == 3 || $week == 5){
            if($working_days == 1 || $working_days == 3 || $working_days == 5){
                         sendEmail($to, $title, $content, $content1);
                         //echo("week " .$week." -> "."1 => ".$working_days."<br>");
                         //echo("send");
            }
            else{
                echo("week " .$week." -> "."1 => ".$working_days."<br>");
                echo("do not send");
            }
        }
        else{
            if($working_days == 2 || $working_days == 4){
              sendEmail($to, $title, $content, $content1);
              //echo("week ".$week."-> "."2 => ".$working_days."<br>");
              //echo("send");
            }
            else{
                echo("week " .$week." -> "."1 => ".$working_days."<br>");
                echo("do not send");
            }
        } 

【问题讨论】:

  • 你需要学习如何使用 CRON 作业
  • 是运行此功能的用户,您只希望它在指定日期运行,还是您想要的婴儿床作业(在指定日期自动运行脚本)?
  • 二月又是怎样的呢?和一月相反吗?第一次使用“x”的意思是 4 号星期二?
  • 它将是每天自动执行脚本的 cron 作业,但会根据脚本决定是否在该特定日期运行该函数。希望我能回答你的问题
  • 好的!只是我的第二个问题,也是二月,那么一切都清楚了

标签: php date calendar


【解决方案1】:

应该这样做。
我使用日期 W 查看周数,看看它是均匀的还是不均匀的。
这就是星期的区别。

$date = "2020-01-06";

echo $week = date( 'W', strtotime( $date ) );
$working_days = date('N', strtotime($date));


if($week % 2 == 1){
    if($working_days == 1 || $working_days == 3 || $working_days == 5){
         sendEmail($to, $title, $content, $content1);
         //echo("week " .$week." -> "."1 => ".$working_days."<br>");
         //echo("send");
    } else{
          echo("week " .$week." -> "."1 => ".$working_days."<br>");
          echo("do not send");
    }
}else{
    if($working_days == 2 || $working_days == 4){
          sendEmail($to, $title, $content, $content1);
          //echo("week ".$week."-> "."2 => ".$working_days."<br>");
          //echo("send");
    }else{
           echo("week " .$week." -> "."1 => ".$working_days."<br>");
           echo("do not send");
    }
}

【讨论】:

  • $date = "2020-01-06";它不会在那天发送电子邮件,但它甚至不会在 2 月 6 日或 2 月 4 日发送电子邮件。
  • 抱歉忘记在代码中包含工作日的内容。我不确定它是否应该在“x”上触发。如果有工作日,此代码将在 2020-01-06 触发
  • 是的,它应该在“x”被划掉的日子触发
  • 那么编辑应该可以工作了。 3v4l.org/JBglo 请注意我如何添加工作日并替换 0 => 1
  • 您能解释一下为什么您将年份的周数而不是月份分配给 $week 吗?
猜你喜欢
  • 2013-10-05
  • 2013-05-19
  • 2016-08-01
  • 2019-02-07
  • 2020-12-16
  • 1970-01-01
  • 2017-10-13
  • 1970-01-01
  • 2011-03-14
相关资源
最近更新 更多