奇怪的PHP问题 - DatePeriod在迭代数月时不显示二月。

时间:2015-07-10 08:56:53

标签: php

这是我的代码

$from = '2014-10-01 00:00:00';
$to = '2015-05-31 23:30:00';

$start = new DateTime('@' . strtotime($from), new DateTimeZone('Asia/Dubai'));
$end = new DateTime('@' . strtotime($to), new DateTimeZone('Asia/Dubai'));
$interval = DateInterval::createFromDateString('1 month');
$period = new DatePeriod($start, $interval, $end);

$count = 0;

foreach ($period as $dt) {
    echo $dt->format('Y-M').'<br>';
}

exit;

我需要获取一个月的开始日期和月份的结束日期。所以,我使用DatePeriod。

但是,这只显示了这个输出。

2014-Sep
2014-Oct
2014-Nov
2014-Dec
2015-Jan
2015-Mar
2015-Apr
2015-May

不知何故,2月错过了。

任何人都可以帮我这个吗?

1 个答案:

答案 0 :(得分:1)

只需从代码中移除strtotime@,它就可以正常运行。因为您无需为date

创建时间戳
$from = '2014-10-01 00:00:00';
$to = '2015-05-31 23:30:00';

$start = new DateTime($from, new DateTimeZone('Asia/Dubai'));
$end = new DateTime($to, new DateTimeZone('Asia/Dubai'));
$interval = DateInterval::createFromDateString('1 month');
$period = new DatePeriod($start, $interval, $end);

$count = 0;

foreach ($period as $dt) {
    echo $dt->format('Y-M').'<br>';
}