下周一或周四是两者中较小的一个.如果使用DateTime而不是DateTimeImmutable,则必须使用来自$Start的副本(克隆).
$start = new DateTime('2022-11-19');
$nextMondayOrThursday = Min(
(clone $start)->modify("next monday"),
(clone $start)->modify("next thursday")
);
echo $nextMondayOrThursday->format('l, d F Y');
//Monday, 21 November 2022
try self :https://3v4l.org/Y5sE5
在数组中指定一周中各天的短形式的解决方案提供了更大的灵活性.通过这种方式,还可以指定一周中的3天或更多天.
$start = date_create('2022-11-20');
$next = ['Mon','Thu','Fri'];
while(!in_array($start->modify('+1 Day')->format('D'),$next));
echo $start->format('l, d F Y');
建议通过验证$NEXT来确保While循环不会无限期运行.
future 的时间,如下周一或下周四,也可以方便地编码为使用cron syntax的字符串.对于星期一或星期四00:00,字符串为:
'0 0 * * 1,4'
一周中的几天被写成从0表示星期日到6表示星期六的数字.一个很大的优势是,这些字符串可以很容易地存储在任何地方,如数据库中.有许多解决方案可以在PHP中实现它(例如cron-expression个).这只是一个使用Jspit\Dt类的例子:
use Jspit\Dt;
$cron = '0 0 * * 1,4';
$date = Dt::create('2022-11-21')->NextCron($cron);
//"2022-11-24 00:00:00.000000"