如何将一个月中的日期转换为日期?

时间:2019-10-26 16:13:42

标签: php date

如何在php中将星期一或其他日期转换为一个月的所有将来日期?还考虑存储在数据库中的假期。例如,考虑到今天的日期是26/10/2019,则2019年10月的星期一应产生一个日期,即28/10/2019。但是,2019年11月的星期一应分别产生4/11 / 2019、11 / 11 / 2019、18 / 11/2019和25/11/2019。

1 个答案:

答案 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 2019next Mondaynext weeklast Friday,依此类推。在编码上述解决方案时,我已经使用了此功能。

  1. $date = DateTime("Monday, October 2019");

这是我们的输入。我们想查找2019年10月的所有星期一

  1. $expected_month = $date->format('m'); 我们将使用循环来限制自己仅打印所选月份中的日期。为此,我们使用$expected_month

  2. $day = new DateTime(sprintf('First %s of %s %d', $date->format('l'), $date->format('F'), $date->format('Y')));

此行将每月第一个星期一的时间戳记分配给$day

  1. while循环检查我们是否在当月本身。在其主体中,我们使用next Monday来获取10月的下一个星期一的日期并将其分配给$day

UPDATE-1

更正了跳过过去日期的功能。

UPDATE-2

根据@Dharman的建议,在仔细阅读了why DateTime is more preferred的一些很好的解释后,使用DateTime代替了strtotime

UPDATE-3 更新了代码以包括今天的日期。