将日期数组转换为月份名称

时间:2016-08-31 05:41:09

标签: php

我有这样的日期数组: -

Array
(
[0] => 2016-08-31
[1] => 2016-08-30
[2] => 2016-08-29
[3] => 2016-08-01
[4] => 2016-07-01
[5] => 2016-06-01
[6] => 2016-05-01
[7] => 2016-04-01
[8] => 2016-03-01
[9] => 2016-02-01
[10] => 2016-01-01
)

需要转换为月份名称,例如1月,2月,而不重复月份名称,并存储到另一个数组中以用作JSON对象。

我尝试date("F", strtotime($dates));但是在12月返回8,而不是8月。

4 个答案:

答案 0 :(得分:3)

  

您必须先使用foreach,然后才能对数据进行json编码。

<?php
$month_value=[];
foreach ($values as $key => $monthval) {
    $month_value[] = date('F',strtotime($monthval));
}
$months = array_unique($month_value);
$final_month = json_encode($months); // this output will be a json value
?>

答案 1 :(得分:1)

您需要通过日期并将月份存储在新数组中并应用array_unique

$dates = [
    '2016-08-31',
    '2016-08-30',
    '2016-08-29',
    '2016-08-01',
    '2016-07-01',
    '2016-06-01',
    '2016-05-01',
    '2016-04-01',
    '2016-03-01',
    '2016-02-01',
    '2016-01-01',
];

$months = [];
foreach($dates as $date) {
    $months[] = date('F', strtotime($date));
}

$months = array_unique($months);
var_dump($months);

答案 2 :(得分:0)

在数组变量 $ months_list 中存储唯一月份。

  

方法1 :只有在 $ months_list 数组中找不到它,我们才会循环显示每个日期,计算月份并追加月份。< / p>

试试这个:

$months_list = [];

foreach($dates as $date) {
    $month = date('F', strtotime($date));
    if (!in_array($month, $months_list)) {
        $months_list[] = $month;
    }
}
  

方法2 :使用array_map()应用回调函数,并将每个日期转换为月份名称。然后,我们可以应用array_unique()函数来选择唯一的月份名称。

$months_list = array_map(function($date){
    return date('F', strtotime($date));
}, $dates);

$months_list = array_unique($months_list);

答案 3 :(得分:0)

有一种方法:你可以使用jdmonthname(...)。 这是一个代码:

  $dates = Array(
    '2016-08-31',
    '2016-08-30',
    '2016-08-29',
    '2016-08-01',
    '2016-07-01',
    '2016-06-01',
    '2016-05-01',
    '2016-04-01',
    '2016-03-01',
    '2016-02-01',
    '2016-01-01'
  );

  foreach ($dates as $value) {
    $date = explode('-', $value);
    $year = intval($date[0]);
    $month = intval($date[1]);
    $day = intval($date[2]);
    $jd = gregoriantojd($month, $day, $year);
    echo jdmonthname($jd, 1) . '<br />';
  }