如何在php中将星期一或其他日期转换为一个月的所有将来日期?还考虑存储在数据库中的假期。例如,考虑到今天的日期是26/10/2019,则2019年10月的星期一应产生一个日期,即28/10/2019。但是,2019年11月的星期一应分别产生4/11 / 2019、11 / 11 / 2019、18 / 11/2019和25/11/2019。
答案 0 :(得分:0)
下面的代码是我能想到的。我已经使用DateTime
的功能来读取和解析日期字符串。让我逐行解释。
$date = new DateTime("Saturday, November 2019");
$expected_month = $date->format('m');
$day = new DateTime(sprintf('First %s of %s %d', $date->format('l'), $date->format('F'), $date->format('Y')));
$now = new DateTime();
while($day->format('m') == $expected_month) {
if($day->getTimestamp() >= $now->getTimestamp()) {
print($day->format('d/m/Y'));
}
$day = $day->modify(sprintf("next %s", $date->format('l')));
echo "<br/>";
}
说明
PHP的[DateTime]
非常好地解析了这些日期字符串。例如:First Sunday of October 2019
,next Monday
,next week
,last Friday
,依此类推。在编码上述解决方案时,我已经使用了此功能。
$date = DateTime("Monday, October 2019");
这是我们的输入。我们想查找2019年10月的所有星期一
$expected_month = $date->format('m');
我们将使用循环来限制自己仅打印所选月份中的日期。为此,我们使用$expected_month
。
$day = new DateTime(sprintf('First %s of %s %d', $date->format('l'), $date->format('F'), $date->format('Y')));
此行将每月第一个星期一的时间戳记分配给$day
。
while
循环检查我们是否在当月本身。在其主体中,我们使用next Monday
来获取10月的下一个星期一的日期并将其分配给$day
。 UPDATE-1
更正了跳过过去日期的功能。
UPDATE-2
根据@Dharman的建议,在仔细阅读了why DateTime
is more preferred的一些很好的解释后,使用DateTime
代替了strtotime
UPDATE-3 更新了代码以包括今天的日期。