PHP获取一段时间内的每个周几, 每月几号, 遇到特殊日子就往后延

2021-06-16 14:03

阅读:404

标签:timestamp   strtotime   list   nes   func   date   用户   each   时间戳   

2016年11月1日 16:18:19 星期二

主要用到的函数是 strtotime()

strtotime(‘+1 Tuesday‘, $timestamp) 获取下周二, 从时间戳$timestamp开始计算, 如果$timestamp留空, 则从当天开始计算

strtotime(‘+1 month‘, $timestamp) 获取下个月的x号, 还是以$timestamp开始计算的

  1 /**
  2      * desc 获取每周X执行的所有日期
  3      * @param string $start 开始日期, 2016-10-17
  4      * @param string $end 结束日期, 2016-10-17
  5      * @param int $weekDay 1~5
  6      * @return array
  7      */
  8     public function getWeeklyBuyDate($start, $end, $weekDay)
  9     {
 10         //获取每周要执行的日期 例如: 2016-01-02
 11         $start = empty($start) ? date(‘Y-m-d‘) : $start;
 12         $startTime = strtotime($start);
 13 
 14         $startDay = date(‘N‘, $startTime);
 15         if ($startDay  $endTime) {
 26                 break;
 27             }
 28             $list[] = date(‘Y-m-d‘, $dayOfWeek);
 29         }
 30 
 31         return $this->getExedate($start, $end, $list);
 32     }
 33 
 34     /**
 35      * desc 获取每月X号执行的所有日期
 36      * @param string $start 开始日期, 2016-10-17
 37      * @param string $end 结束日期, 2016-10-17
 38      * @param int $monthDay 1~28
 39      * @return array
 40      */
 41     public function getMonthlyBuyDate($start, $end, $monthDay)
 42     {
 43         $monthDay = str_pad($monthDay, 2, ‘0‘, STR_PAD_LEFT); //左边补零
 44         $start = empty($start) ? date(‘Y-m-d‘) : $start;
 45         $startTime = strtotime($start);
 46         $startDay = substr($start, 8, 2);
 47 
 48         if (strcmp($startDay, $monthDay)  $endTime) {
 59                 break;
 60             }
 61             $list[] = date(‘Y-m-d‘, $dayOfMonth);
 62         }
 63         
 64         return $this->getExedate($start, $end, $list);
 65 
 66     }
 67 
 68     /**
 69      * desc 返回顺延后的执行日期列表
 70      * @param string $start 开始日期, 2016-10-17
 71      * @param string $end 结束日期, 2016-10-17
 72      * @param array $planDate
 73      * @return array
 74      */
 75     public function getExedate($start, $end, $planDate)
 76     {
 77         //获取所有交易日
 78         $allTradeDate = $this->getTradeDate($start, $end);
 79 
 80         //取最后一个交易日
 81         $endTradeDate = end($allTradeDate); //返回格式: [‘2016-11-01‘ => ‘2016-11-01‘, ‘2016-11-02‘ => ‘2016-11-02‘, ...], 有冗余,方便编程
 82 
 83         $exeDate = []; //顺延后的执行日期
 84         foreach ($planDate as $date) {
 85             if (!empty($allTradeDate[$date])) {
 86                 $exeDate[$date] = $date;
 87             } else { //没找到, 需要往后顺延到下一个交易日
 88                 $exeDate[$date] = ‘‘;
 89 
 90                 $endTradeTime = strtotime($endTradeDate);
 91                 $currentTime = strtotime($date);
 92 
 93                 for ($i=$currentTime; $i

 其中:

1 public static $WORK_DAY = [
2         1 => [‘en‘ => ‘Monday‘, ‘cn‘ => ‘一‘],
3         2 => [‘en‘ => ‘Tuesday‘, ‘cn‘ => ‘二‘],
4         3 => [‘en‘ => ‘Wednesday‘, ‘cn‘ => ‘三‘],
5         4 => [‘en‘ => ‘Thursday‘, ‘cn‘ => ‘四‘],
6         5 => [‘en‘ => ‘Friday‘, ‘cn‘ => ‘五‘]
7     ];

 

PHP获取一段时间内的每个周几, 每月几号, 遇到特殊日子就往后延

标签:timestamp   strtotime   list   nes   func   date   用户   each   时间戳   

原文地址:http://www.cnblogs.com/lqylqy/p/7271399.html


评论


亲,登录后才可以留言!