如何从包含日期的数组中获得不同的月份

时间:2016-08-23 14:23:54

标签: php

我有一个包含日期的数组。即

array(
    0 => '2016-08-01',
    1 => '2016-07-15',
    2 => '2016-07-01'
);

我需要在数组中获得不同的月份。即

array(
    0 => 7,
    1 => 8
);

我需要它做一个foreach来显示:六月 - Juy - 八月与日期数组的不同月份。 (那部分我知道如何)

3 个答案:

答案 0 :(得分:3)

您可以使用array_mapDateTimearray_unique的组合重新格式化日期,以实现该结果。

$arr = array(
    0 => '2016-08-01',
    1 => '2016-07-15',
    2 => '2016-07-01'
);
$dates = array_unique(array_map(function($date) {
    return DateTime::createFromFormat('Y-m-d', $date)->format('n');
}, $arr));

var_dump($dates);
array(2) {
  [0]=>
  string(1) "8"
  [1]=>
  string(1) "7"
}

当然,重要的是要注意这个结果,如2015-08-112016-08-04这两个日期都显示为数组中的一个值。因此,为什么要这样做并不完全清楚,但这将满足您的指定要求。

答案 1 :(得分:1)

这是你需要的循环:

<?php
$arr = array( '2016-08-01',
              '2016-07-15',
              '2016-07-01' );
$months = array(); // EMPTY ARRAY FOR MONTHS.
foreach ( $arr as $date ) // VISIT EACH DATE IN ARRAY.
{ $mon = substr( $date,5,2 ); // EXTRACT THE MONTH DIGITS.
  if ( ! in_array( $mon,$months ) ) // IF MONTH IS NOT IN ARRAY
     array_push( $months,$mon ); // INSERT THE MONTH DIGITS.
}
var_dump( $months );
?>

编辑:显示月份名称:

<?php
$arr = array( '2016-08-01',
              '2016-07-15',
              '2016-07-01' );
$months = array(); // EMPTY ARRAY FOR MONTHS.
foreach ( $arr as $date ) // VISIT EACH DATE IN ARRAY.
{ $mon = substr( $date,5,2 ); // EXTRACT THE MONTH DIGITS.
  if ( ! in_array( $mon,$months ) ) // IF MONTH IS NOT IN ARRAY
     { array_push( $months,$mon ); // INSERT THE MONTH DIGITS.
       echo date ("F",mktime( null,null,null,$mon,1 ) ); // ◄ MONTH NAME!!!
     }
}
?>

编辑#2:在数组中存储月份名称:

<?php
$arr = array( '2016-08-01',
              '2016-07-15',
              '2016-07-01' );
$months = array(); // EMPTY ARRAY FOR MONTHS.
foreach ( $arr as $date ) // VISIT EACH DATE IN ARRAY.
{ $mon = date("F",mktime( null,null,null,substr( $date,5,2 ),1 ) ); // EXTRACT MONTH.
  if ( ! in_array( $mon,$months ) ) // IF MONTH IS NOT IN ARRAY
     array_push( $months,$mon ); // INSERT MONTH NAME IN ARRAY.
}
var_dump( $months );
?>

答案 2 :(得分:0)

只需在每个日期数组条目上使用substr来检索字符5到7,然后将它们存储在新数组中:

$dates = array(
    0 => '2016-08-01',
    1 => '2016-07-15',
    2 => '2016-07-01');
$months = array();

foreach ($dates as $date) {
    $months[] = (int)substr($date, 5, 2);
}
$months = array_unique($months); // Remove duplicates
sort($months);