如何按月在两个指定日期之间进行迭代

jus*_*inl 2 php datetime

我有一个网站,几个月前推出.我想编写一些代码,每个月都会查看,自启动以来,并抓住该月的指标.

我的问题是:指定开始日期,然后按月迭代,一直到当前月份(或另一个指定日期)的最佳方法是什么.

有没有人有什么建议?我正在使用PHP和mySQL数据库.

CMS*_*CMS 6

您可以使用strtotime,通过以下方式增加日期+1 month:

$date1 = strtotime('2009-01-01');
$date2 = strtotime('2010-01-01');

while ($date1 <= $date2) {
  echo date('Y-m-d', $date1) . "\n";
  $date1 = strtotime('+1 month', $date1);
}
Run Code Online (Sandbox Code Playgroud)

如果你有PHP> = 5.3.0,你可以使用DateTime::add一个DateInterval对象

这里查看上面的例子.


pol*_*1er 5

我有一个结果最佳的方法:

$begin = new DateTime( '2014-07-14' );
$end = new DateTime( '2014-08-01' );
$end = $end->modify( '+1 month' );
$interval = DateInterval::createFromDateString('1 month');

$period = new DatePeriod($begin, $interval, $end);

foreach($period as $dt) {
    var_dump($dt->format( "m" ));
}
Run Code Online (Sandbox Code Playgroud)

希望这会有所帮助。


mic*_*man 1

我不知道您存储的指标的架构,所以这是一个通用示例:

选择 2009 年 8 月 1 日至 11 月 30 日期间每月的总浏览量

MySQL 的代码:

SELECT DATE_FORMAT(s.date, '%Y-%m') AS  year_month , SUM( s.pageviews ) AS  s.pageviews_total 
FROM statistics s
WHERE s.date BETWEEN '2009-08-01' AND '2009-11-30'
GROUP BY DATE_FORMAT(s.date, '%Y-%m') 
ORDER BY DATE_FORMAT(s.date, '%Y-%m')
Run Code Online (Sandbox Code Playgroud)

拥有聚合表输出可能对您来说就足够了。如果没有,您可以使用 PHP 循环它并执行其他操作。