我正在尝试这段代码:
$start_date = "2015-08-19";
$end_date = "2016-02-19";
$begin = new DateTime( $start_date );
$end = new DateTime( $end_date);
$interval = new DateInterval('P1Y'); // 1 Year interval
$period = new DatePeriod($begin, $interval, $end);
foreach ( $period as $dt ){
echo $dt->format( "Y" );
}
$intervals = new DateInterval('P1M'); // 1 month interval
$periods = new DatePeriod($begin, $intervals, $end);
foreach ( $periods as $dts ){
echo $dts->format( "m" );
}
我得到这样的输出:
year:2015
Month:08,09,...,01
在这个输出中,我没有得到年份:2016年和月份:02。我希望我的输出像这样:
year:2015,2016
Month:08,09,...,01,02
我怎么能得到这个?
如果我的结束日期是" 2016-08-20"
比获得年份:2016年但未获得月份:08
请注意,我的开始日期和结束日期不是固定的。
答案 0 :(得分:1)
如前所述,不包括结束日期
您也可以像这样修改结束日期
$end = $end->modify( '+1 day +1 year' );
有关详细信息,请参阅php的日期时间modify。
<强>更新强>
如果结束年份比开始日期大1年以上,那么添加一年的确会比我们想要的更多一年。
解决方案是仅在需要时检查并添加年份:
if($begin > (new DateTime( $end_date))->modify('-1 year')) {
$end->modify( '+1 year' );
}
$end->modify('+1 day');
答案 1 :(得分:1)
您可以使用以下代码来实现此目的:
<?php
$start = (new DateTime('2015-12-02'))->modify('first day of this month');
$end = (new DateTime('2016-05-06'))->modify('first day of this month');
//For Year
$interval = DateInterval::createFromDateString('1 year');
$period = new DatePeriod($start, $interval, $end);
echo 'Year: ';
foreach ($period as $dt)
{
echo $dt->format("Y") . ",";
}
//For Month
$interval = DateInterval::createFromDateString('1 month');
$period = new DatePeriod($start, $interval, $end);
echo '<br/>Month: ';
foreach ($period as $dt)
{
echo $dt->format("m") . ",";
}
?>
或者,您可以通过以下代码以
Y-m
格式很好地显示它:
$start = (new DateTime('2015-12-02'))->modify('first day of this month');
$end = (new DateTime('2016-05-06'))->modify('first day of this month');
$interval = DateInterval::createFromDateString('1 month');
$period = new DatePeriod($start, $interval, $end);
foreach ($period as $dt)
{
echo $dt->format("Y-m") . "<br>\n";
}
答案 2 :(得分:0)
自2016年以来,02月未完成,您没有得到它。 试试这个
$start_date = "2015-08-19";
$end_date = "2016-02-19";
$begin = new DateTime( $start_date );
$end = new DateTime( $end_date);
$end->add(new DateInterval('P1Y1M'));
$interval = new DateInterval('P1Y'); // 1 Year interval
$period = new DatePeriod($begin, $interval, $end);
foreach ( $period as $dt ){
echo $dt->format( "Y" );
}
$intervals = new DateInterval('P1M'); // 1 month interval
$periods = new DatePeriod($begin, $intervals, $end);
foreach ( $periods as $dts ){
echo $dts->format( "m" );
}