首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在php中将日期分组为月

在php中将日期分组为月
EN

Stack Overflow用户
提问于 2013-07-19 02:48:18
回答 4查看 1.6K关注 0票数 0

创建了下面的make time以显示两周一次的日期

代码语言:javascript
复制
<?php
  $date1 = "07/05/2013";
  $date2 = date('M j, Y', strtotime($date1 . " + 14 day"));
  $date3 = date('M j, Y', strtotime($date2 . " + 14 day"));
  $date4 = date('M j, Y', strtotime($date3 . " + 14 day"));
  $date5 = date('M j, Y', strtotime($date4 . " + 14 day"));
  $date6 = date('M j, Y', strtotime($date5 . " + 14 day"));
  $date7 = date('M j, Y', strtotime($date6 . " + 14 day"));
  $date8 = date('M j, Y', strtotime($date7 . " + 14 day"));
  $date9 = date('M j, Y', strtotime($date8 . " + 14 day"));
  $date10 = date('M j, Y', strtotime($date9 . " + 14 day"));
  $date11 = date('M j, Y', strtotime($date10 . " + 14 day"));
  $date12 = date('M j, Y', strtotime($date11 . " + 14 day"));
  $date13 = date('M j, Y', strtotime($date12 . " + 14 day"));
  $date14 = date('M j, Y', strtotime($date13 . " + 14 day"));
  $date15 = date('M j, Y', strtotime($date14 . " + 14 day"));
  $date16 = date('M j, Y', strtotime($date15 . " + 14 day"));
  $date17 = date('M j, Y', strtotime($date16 . " + 14 day"));
  $date18 = date('M j, Y', strtotime($date17 . " + 14 day"));
?>

我怎么才能让它按月分组?假设我想知道有多少日期在8月或12月。另外,如果我想在年底前得到多少个日期呢?我们将非常感谢您的帮助。

EN

回答 4

Stack Overflow用户

发布于 2013-07-19 03:03:50

试试这个:

代码语言:javascript
复制
<?php
// initiate months
$month_arr = Array();
for ($i=1; $i<=12; $i++){
    // no. of dates
    $month_arr[$i] = 0;
}
$date_arr = Array();
$date_start = "07/05/2013";
$date_arr[] = date('M j, Y', strtotime($date_start));

for ($i=1; $i<=17; $i++){
    $date_temp = date('M j, Y', strtotime($date_arr[$i-1] . " + 14 day"));
    $month = date('n', strtotime($date_temp));

    $month_arr[$month] += 1;
    $date_arr[] = $date_temp;

  }

 foreach ($month_arr as $k => $v){
    echo "<BR>Month: " . $k . ", No. of dates: " . $v;
 }

// all dates
echo "<BR>All dates<BR>";
var_dump ($date_arr);
?>

您可以扩展此逻辑以按月对实际日期进行分组,而不是仅获取一个月中的日期计数。这就是解决方案:

代码语言:javascript
复制
<?php
// initiate months
$month_arr = Array(
            'January' => Array('num_dates'=>0, 'dates'=>Array()) , 
            'February' => Array('num_dates'=>0, 'dates'=>Array()), 
            'March' => Array('num_dates'=>0, 'dates'=>Array()), 
            'April' => Array('num_dates'=>0, 'dates'=>Array()), 
            'May' => Array('num_dates'=>0, 'dates'=>Array()), 
            'June' => Array('num_dates'=>0, 'dates'=>Array()), 
            'July' => Array('num_dates'=>0, 'dates'=>Array()), 
            'August' => Array('num_dates'=>0, 'dates'=>Array()), 
            'September' => Array('num_dates'=>0, 'dates'=>Array()), 
            'October' => Array('num_dates'=>0, 'dates'=>Array()), 
            'November' => Array('num_dates'=>0, 'dates'=>Array()), 
            'December' => Array('num_dates'=>0, 'dates'=>Array())
        );
$date_arr = Array();

$date_start = "07/05/2013";
$date_arr[] = date('M j, Y', strtotime($date_start));

for ($i=1; $i<=17; $i++){
    $date_temp = date('M j, Y', strtotime($date_arr[$i-1] . " + 14 day"));
    $month = date('F', strtotime($date_temp));

    $month_arr[$month]['dates'][] = $date_temp;
    $month_arr[$month]['num_dates'] += 1;
    $date_arr[] = $date_temp;
}

foreach ($month_arr as $k => $v){
    if (!empty($v)){
        if ($v['num_dates'] != 0){
            echo "<BR><BR>Month: " . $k;
            echo "<BR>No. of dates: " . $v['num_dates'];
            foreach ($v['dates'] as $k1=>$v1){
                echo "<BR>" . $v1;
            }
        }
     }
}
?>

在这一点上,$month_arr应该具备了您需要的一切。

票数 1
EN

Stack Overflow用户

发布于 2013-07-19 04:05:13

我不太清楚您所说的按月分组是什么意思,但这将使用一个数组来声明所有日期,并且您可以更改$limit变量以增加或减少日期的数量。change $dates to and original date $left是数组中还剩多少天(它在命中第一天后触发,可以更改为在最后一天触发),$amount是8月份的日期数量

代码语言:javascript
复制
<?php
$limit = 17;
$dates = array("07-05-2013");
for ($i=1; $i<=$limit; $i++){
    $dates[$i]=date('d-m-Y', strtotime($dates[$i-1] . "+ 14 days"));
}
foreach (array_keys($dates) as $key){ 
    $value = date('m', strtotime($dates[$key])); 
    if ($value == "08"){
        $amount = $amount + 1;  
    }
    if ($amount == 1){
        $left = $limit-$key;
    }
}
print_r ($dates);
echo "<br>";
echo $amount . "<br>" . $left;
?>
票数 1
EN

Stack Overflow用户

发布于 2013-07-19 02:51:25

只需添加一条if语句,并在整个12个月内递增...如果月份相同

代码语言:javascript
复制
 $n=1;
 $month=array();//dumpyour dates in  an array
 $date=array()

 while($k<30){
 if  (date('n', strtotime($date[$k]))==date('n', strtotime($date[$k-1])){
 echo $date[$k++];
 $m = date('n', strtotime($date[$k]));
 $month[$m]=++$n;
 }
 else{
 .....

 }
 }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17731572

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档