今天遇到一个需要获取2022年年内所有周五日期的需求,
方法如下:
function getWeeklyBuyDate($start='2022-04-05', $end='2022-04-30', $weekDay=1)
{
$WORK_DAY = [
1 => ['en' => 'Monday', 'cn' => '一'],
2 => ['en' => 'Tuesday', 'cn' => '二'],
3 => ['en' => 'Wednesday', 'cn' => '三'],
4 => ['en' => 'Thursday', 'cn' => '四'],
5 => ['en' => 'Friday', 'cn' => '五']
];
//获取每周要执行的日期 例如: 2016-01-02
$start = empty($start) ? date('Y-m-d') : $start;
$startTime = strtotime($start);
$startDay = date('N', $startTime);
if ($startDay < $weekDay) {
$startTime = strtotime($WORK_DAY[$weekDay]['en'], strtotime($start)); //本周x开始, 例如, 今天(周二)用户设置每周四执行, 那本周四就会开始执行
} else {
$startTime = strtotime('next '.$WORK_DAY[$weekDay]['en'], strtotime($start));//下一个周x开始, 今天(周二)用户设置每周一执行, 那应该是下周一开始执行
}
$endTime = strtotime($end);
$list = [];
for ($i=0;;$i++) {
$dayOfWeek = strtotime("+{$i} week", $startTime); //每周x
if ($dayOfWeek > $endTime) {
break;
}
$list[] = date('Y-m-d', $dayOfWeek);
}
return $list;
}
获取 出来的结果如
Array
(
[0] => 2022-04-04
[1] => 2022-04-11
[2] => 2022-04-18
[3] => 2022-04-25
[4] => 2022-05-02
[5] => 2022-05-09
[6] => 2022-05-16
[7] => 2022-05-23
[8] => 2022-05-30
[9] => 2022-06-06
[10] => 2022-06-13
[11] => 2022-06-20
[12] => 2022-06-27
[13] => 2022-07-04
[14] => 2022-07-11
[15] => 2022-07-18
[16] => 2022-07-25
[17] => 2022-08-01
[18] => 2022-08-08
[19] => 2022-08-15
[20] => 2022-08-22
[21] => 2022-08-29
[22] => 2022-09-05
[23] => 2022-09-12
[24] => 2022-09-19
[25] => 2022-09-26
[26] => 2022-10-03
[27] => 2022-10-10
[28] => 2022-10-17
[29] => 2022-10-24
[30] => 2022-10-31
[31] => 2022-11-07
[32] => 2022-11-14
[33] => 2022-11-21
[34] => 2022-11-28
[35] => 2022-12-05
[36] => 2022-12-12
[37] => 2022-12-19
[38] => 2022-12-26
)
一个小方法,可以参考。获取每个周特定周几的日期。