Добрый день. Стряпал функцию для построения графика. Выглядит так: PHP: $result[0]['y'] = 0; $result[0]['x'] = date('Y-d-m H:i:s', strtotime('07:00:00')); $key = 1; foreach ($plan as $val) { $second = $val['cycl'] * $val['plan']; if($result[$key-1]['y'] !== 0){ $result[$key]['y'] = $val['plan'] + $result[$key-1]['y']; $result[$key]['x'] = date('Y-d-m H:i:s', strtotime('+'.$second.' second', strtotime($result[$key-1]['x']))); }else{ $result[$key]['y'] = (int)$val['plan']; $result[$key]['x'] = date('Y-d-m H:i:s', strtotime('+'.$second.' second', strtotime($result[0]['x']))); } $key ++; } return $result; Суть ошибки, я задаю порядок date('Y-d-m H:i:s') но проходя через цикл месяц с днем меняются местами. Например на выходе сейчас так: PHP: $result[0]['x'] = '2019-11-02 07:00:00'; $result[1]['x'] = '2019-02-11 13:08:00'; $result[2]['x'] = '2019-11-02 15:45:52'; Подскажите пожалуйста, почему так происходит, где я ошибся? Если написать date('Y-m-d H:i:s') то меняются местами не будет, почему такое поведение?(
Записал так, ошибка осталась: PHP: date('Y-d-m H:i:s', strtotime($result[0]['x'].'+'.$second.' second'));
Дорабатываю функцию потихоньку: PHP: $result[0]['y'] = 0; $result[0]['x'] = date('Y-d-m H:i:s',strtotime('07:00:00')); $key = 1; $daySecond = 43200; $dayPlanSecond = 0; foreach ($plan as $val) { $dayPlanSecond += $val['cycl'] * $val['plan']; } $dayPlanSecond = $daySecond - $dayPlanSecond; foreach ($plan as $val) { $second = $val['cycl'] * $val['plan']; if($result[$key-1]['y'] !== 0){ $result[$key]['y'] = $val['plan'] + $result[$key-1]['y']; $result[$key]['x'] = date('Y-d-m H:i:s', strtotime('+'.$second.' second', strtotime($result[$key-1]['x']))); }else{ $result[$key]['y'] = (int)$val['plan']; $result[$key]['x'] = date('Y-d-m H:i:s', strtotime('+'.$second.' second', strtotime($result[0]['x']))); if($dayPlanSecond > 0){ $key ++; $result[$key]['y'] = $result[$key-1]['y']; $result[$key]['x'] = date('Y-d-m H:i:s', strtotime('+'.$dayPlanSecond.' second', strtotime($result[$key-1]['x']))); } } $key ++; } return $result; На выходе получаю: PHP: $result[0]['x']='2019-11-02 07:00:00'; $result[1]['x']='2019-02-11 13:08:00'; $result[2]['x']='2019-11-02 16:22:08'; $result[3]['x']='2019-02-11 19:00:00'; Почему месяца местами меняются?(
@ElisDN спасибо, сейчас попробую --- Добавлено --- @TeslaFeo есть график на canvas.js. Надо туда еще одну линию запихнуть с планом на смену. До этого на flot.js было сделано. Переделываю вот, максимально убирая js код. --- Добавлено --- @ElisDN спасибо, все работает, написал так: PHP: $result[0]['y'] = 0; $result[0]['x'] = date('Y-d-m H:i:s',strtotime('07:00:00')); $key = 1; $daySecond = 43200; $dayPlanSecond = 0; foreach ($plan as $val) { $dayPlanSecond += $val['cycl'] * $val['plan']; } $dayPlanSecond = $daySecond - $dayPlanSecond; foreach ($plan as $val) { $second = $val['cycl'] * $val['plan']; if($result[$key-1]['y'] !== 0){ $date = date('Y-d-m H:i:s', strtotime($result[$key-1]['x'])); $result[$key]['y'] = $val['plan'] + $result[$key-1]['y']; $result[$key]['x'] = date('Y-d-m H:i:s', strtotime('+'.$second.' second', strtotime($date))); }else{ $date = date('Y-d-m H:i:s', strtotime($result[0]['x'])); $result[$key]['y'] = (int)$val['plan']; $result[$key]['x'] = date('Y-d-m H:i:s', strtotime('+'.$second.' second', strtotime($date))); if($dayPlanSecond > 0){ $key ++; $date = date('Y-d-m H:i:s', strtotime($result[$key-1]['x'])); $result[$key]['y'] = $result[$key-1]['y']; $result[$key]['x'] = date('Y-d-m H:i:s', strtotime('+'.$dayPlanSecond.' second', strtotime($date))); } } $key ++; } return $result; Со стороны без бутылки не разберутся конечно, но работает =)
Работает не потому, что исправили, а потому, что теперь даты два раза путаются вместо одного. А так вообще весьма странно Y-d-m использовать вместо Y-m-d.