Как сделать изменение месяца и года динамически на php?

298
23 декабря 2017, 06:36

Для построения графика мне необходимо по Х выстроить месяца с годами. На примере <?php echo date( "m.20y" );?>. Соответственно по месяцам я могу сделать +1, а и то не знаю вдруг покажет 13 и так далее, а как быть с годами, что-бы в соответствии месяца менялся год. Распределение такое 12.2017 01.2018 02.2018 и так далее. Вручную постоянно менять данные не ахти, может есть такое решение выводить месяца будущие в правильном виде? Значения вставляются каждое отдельно! Вот пример кода с датами

xAxis: {
        categories: ['2017-12','2018-01','2018-02', '2018-03','2018-04','2018-05','2018-06','2018-07','2018-08','2018-09','2018-10','2018-11']
 },
     yAxis: {
        title: {
           text: '1 человек, в одну сторону'
        }
     },
     series: [{
        name: 'Москва-Адлер',<? echo ['1 человек, в одну сторону']?>,
        data: [0, 0, 0, 0, 0, <? echo $AER['data']['2017-12']['price']; ?>,<? echo $AER['data']['2018-01']['price']; ?>,<? echo $AER['data']['2018-02']['price']; ?>,<? echo $AER['data']['2018-03']['price']; ?>,<? echo $AER['data']['2018-04']['price']; ?>,<? echo $AER['data']['2018-05']['price']; ?>,<? echo $AER['data']['2018-06']['price']; ?>,<? echo $AER['data']['2018-07']['price']; ?>,<? echo $AER['data']['2018-08']['price']; ?>,<? echo $AER['data']['2018-02']['price']; ?>,<? echo $AER['data']['2018-09']['price']; ?>,<? echo $AER['data']['2018-10']['price']; ?>,<? echo $AER['data']['2018-11']['price']; ?>]
     },
Answer 1
$dates = [];
$startMonth = 12;
$startYear=2017;
$monthesOnAxis=13;
for($i = 0; $i < $monthesOnAxis; $i++){
    $dates[] = date('Y-m', mktime(
        0, 0, 0, $startMonth + $i, 1, $startYear
    ));
}

После этого у нас в $dates будут все нужные "засечки" месяцев. Функция mktime() нормально работает с "неправильными" датами, для неё 13.2017 == 01.2018

Предполагаю, что ваш код это JS, тогда вывести даты в него из php можно, например, так:

xAxis: {
        categories: <?=json_encode($dates)?>
 },
 ...

UPD: для поля data код такой (стоять должен ниже, чем код, формирующий $dates):

$data = [0, 0, 0, 0, 0]; //нули вначале как в вашем примере.
foreach($dates as $date){
    $data[] = $AER['data'][$date]['price'];
}

Выводим в js точно также:

series: [{
        name: 'Москва-Адлер',<? echo ['1 человек, в одну сторону']?>,
        data: <?=json_encode($data)?>
     }, ...
READ ALSO
Запись массива php в базу данных

Запись массива php в базу данных

Доброго времени сутокИмеется массив переданный на страницу как $_POST['ch'], в котором храниться неизвестное количество чисел (id checkbox'ов)

212
В opencart 2 прибавить процент к цене

В opencart 2 прибавить процент к цене

Как вывести в шаблоне несколько цен, прибавлением процента

194
Аналог рации в браузере [требует правки]

Аналог рации в браузере [требует правки]

Добрый деньЕсть небольшая идея

196
Как переделать PHP код в Laravel код

Как переделать PHP код в Laravel код

Как текущий код Нативного PHP переделать под синтаксис Laravel ORM?

209