gpt4 book ai didi

PHP:带有月份最后一天的 DatePeriod

转载 作者:行者123 更新时间:2023-12-03 09:23:38 25 4
gpt4 key购买 nike

我想使用 PHP DateInterval 来迭代月份:

$from = new DateTime();
$from->setDate(2014, 1, 31);

$period = new DatePeriod($from, new DateInterval('P1M'), 12);

我预计它会返回 1 月 31 日、2 月 28 日(因为 DateInterval 为 1 个月),但它实际上返回 1 月 31 日、3 月 3 日、4 月 3 日...因此跳过 2 月。

有什么方法可以简单地做到这一点吗?

谢谢!

编辑:作为引用,这里是一个似乎涵盖大多数用例的解决方案:

$date = new DateTime('2014-01-31');
$start = $date->format('n');

for ($i = 0; $i < 28; $i++) {
$current = clone $date;
$current->modify('+'.$i.' month');

if ($current->format('n') > ($start % 12) && $start !== 12) {
$current->modify('last day of last month');
}

$start++;

echo $current->format('Y-m-d').PHP_EOL;
}

最佳答案

您可以使用DateTime::modify() :

$date = new DateTime('last day of january');
echo $date->format('Y-m-d').PHP_EOL;

for ($i = 1; $i < 12; $i++) {
$date->modify('last day of next month');
echo $date->format('Y-m-d').PHP_EOL;
}

编辑:我想我没有清楚地理解你的问题。这是一个新版本:

$date = new DateTime('2014-01-31');

for ($i = 0; $i < 12; $i++) {
$current = clone $date;
$current->modify('+'.$i.' month');

if ($current->format('n') > $i + 1) {
$current->modify('last day of last month');
}

echo $current->format('Y-m-d').PHP_EOL;
}

关于PHP:带有月份最后一天的 DatePeriod,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25817111/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com