PHP获取一段时间内的每个周几, 每月几号, 遇到特殊日子就往后延
2021-06-16 14:03
标签: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开始计算的 其中: PHP获取一段时间内的每个周几, 每月几号, 遇到特殊日子就往后延 标签:timestamp strtotime list nes func date 用户 each 时间戳 原文地址:http://www.cnblogs.com/lqylqy/p/7271399.html 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 ];
上一篇:Web安全 概述
文章标题:PHP获取一段时间内的每个周几, 每月几号, 遇到特殊日子就往后延
文章链接:http://soscw.com/essay/94597.html