Php 在月份中有28,29天的日期上添加月份
我试图写一个函数,我可以采取一个日期,并添加到它的x个月。例如,如果日期为2019-01-31,则+1个月应为2019-02-28。我的功能似乎只有在我添加1个月后才能正常工作。有没有办法让它增加一个多月 例如,addMonth('2019-01-31',3)-应该是2019-04-30(4月份只有30天,所以到此为止)Php 在月份中有28,29天的日期上添加月份,php,date,Php,Date,我试图写一个函数,我可以采取一个日期,并添加到它的x个月。例如,如果日期为2019-01-31,则+1个月应为2019-02-28。我的功能似乎只有在我添加1个月后才能正常工作。有没有办法让它增加一个多月 例如,addMonth('2019-01-31',3)-应该是2019-04-30(4月份只有30天,所以到此为止) 让PHPDateTime函数为您完成繁重的工作 $rightnow = new DateTime(); $rightnow->modify('+1 month'); ec
让PHP
DateTime
函数为您完成繁重的工作
$rightnow = new DateTime();
$rightnow->modify('+1 month');
echo $rightnow->format('m-d-Y');
如果您需要可变的开始日期,可以将其传递给第一行的DateTime初始调用(yyyy-mm-dd格式)。默认情况下
DateTime::modify(“+1个月”)
会将当前月份的天数添加到DateTime对象中
您可以通过添加下一个月的天数来解决此问题,如下所示:
<?php
function addMonth($date, $count)
{
$end = clone new DateTime($date);
$nextMonth = clone $end;
/*set the date to be first of month to get the next month*/
$nextMonth->modify('first day of this month');
for($i = 0;$i < $count; $i++){
/*get the number of days in the next month*/
$nextMonth->modify('next month')->modify('last day of this month');
$numOfDaysInNextMonth = $nextMonth->format('d');
/*add number of days in the next month to the end date*/
$end->modify("+$numOfDaysInNextMonth days");
$nextMonth->modify('first day of this month');
}
return $end->format('Y-m-d');
}
echo addMonth('2019-01-31', 1)."<br>"; // 2019-02-28
echo addMonth('2019-01-31', 2)."<br>"; // 2019-03-31
echo addMonth('2019-01-31', 3)."<br>"; // 2019-04-30
如果您想将当前月份的天数添加到当前日期,则@Dave使用的方法是正确的,但我不确定这是否是您想要的。根据您的问题和代码中的注释,在我看来,您希望在未来几个月内找到一个月的最后一天。这并不是那么简单,所以就这样吧。首先,将@Dave的解决方案作为一个函数:
function addMonth($date, $count) {
$dt = DateTime::createFromFormat("Y-m-d", $date)->modify('+'.$count.' month')->format("Y-m-d");
return $dt;
}
如果电话如下所示:
echo '<li>Start: '.addMonth('2019-01-31', 0).'</li>';
echo '<li>Plus 1 month: '.addMonth('2019-01-31', 1).'</li>';
echo '<li>Plus 3 months: '.addMonth('2019-01-31', 3).'</li>';
echo '<li>Plus 12 months: '.addMonth('2019-01-31', 12).'</li>';
echo '<li>Plus 13 months: '.addMonth('2019-01-31', 13).'</li>';
然后输出为:
- 开始日期:2019-01-31
- 加1个月:2019-02-28
- 加上3个月:2019-04-30
- 加上12个月:2020-01-31
- 加上13个月:2020-02-29
这就是我认为你想要的。我希望这会有所帮助。不起作用。这跳过了二月。不需要争论,它会跳到2019年3月3日,但如果你在1月31日(今天)加上一个月,这是正确的日期。如果您只想添加特定的天数或其他任何内容,还有许多其他选项。请参阅中有关modify
方法的用户评论。什么是“一个月”-如果添加2月的daysNice解决方案,它不是正确的日期-在我看来,它应该是这样做的。一个有趣的问题。看看@clinton的答案这个克隆看起来很难看,为什么不直接使用DateTimeImmutable呢
echo '<li>Start: '.addMonth('2019-01-31', 0).'</li>';
echo '<li>Plus 1 month: '.addMonth('2019-01-31', 1).'</li>';
echo '<li>Plus 3 months: '.addMonth('2019-01-31', 3).'</li>';
echo '<li>Plus 12 months: '.addMonth('2019-01-31', 12).'</li>';
echo '<li>Plus 13 months: '.addMonth('2019-01-31', 13).'</li>';
function addMonth($date, $count) {
$start = new DateTime($date);
$start->modify( 'first day of this month' );
$start->modify('+'.$count.' month');
$dt = $start->format('Y-m-t');
return $dt;
}