@evgen9586
Backend-dev. Лублу Enterprise и не люблю понты)

Как правильно сделать статистику?

Через сайт онлайн заказываются услуги.

Есть таблица orders. Где хранятся заказы. Я добавил поле date чтобы оно туда вставляло на автомате дату заказа.
В данный момент формат даты вот такой
2018-04-18 14:29:23

Сделал я такое вот отображение. 5adf14d92985a733049588.jpeg

Т е повесить на изменение даты аякс. Который будет идти на контроллер. Там в Action-е будет переваривать его.
$model = ModelName::find()
->where(['between', 'date', "2018-01-01", "2019-01-01" ])->all();


Но будет ли корректно работатать? Ведь в БД дата вот такого формата 2018-04-18 14:29:23

А из date инпутов дата получается 01.01.2018. Как тут быть чтобы реализовать статистику за период по заказам?
  • Вопрос задан
  • 70 просмотров
Пригласить эксперта
Ответы на вопрос 2
qonand
@qonand
Software Engineer
Но будет ли корректно работатать? Ведь в БД дата вот такого формата 2018-04-18 14:29:23

Все зависит от конкретной СУБД и ее версии. Например в MySQL для такого запроса будут проигнорированы записи за последний день интервала.

А из date инпутов дата получается 01.01.2018. Как тут быть чтобы реализовать статистику за период по заказам?

Преобразовывать дату из формата вывода в формат хранения
Ответ написан
Комментировать
slo_nik
@slo_nik Куратор тега Yii
Добрый день.
Попробуйте так
->where(['between', 'date', date('Y-m-d', strtotime("2018-01-01")), date('Y-m-d', strtotime("2019-01-01")) ])

А лучше хранить дату в timestamp, тогда не будет подобных проблем.
Так же в input можно выводить дату в нужном формате. Даже нужно настроить разделитель даты.
Из документации по strtorime()
Замечание:

Даты в формате m/d/y или d-m-y разрешают неоднозначность с помощью анализа разделителей их элементов: если разделителем является слеш (/), то дата интерпретируется в американском формате m/d/y, если же разделителем является дефис (-) или точка (.), то подразумевается использование европейского формата d-m-y.

Чтобы избежать потенциальной неоднозначности, рекомендуется использовать даты в формате стандарта ISO 8601 (YYYY-MM-DD), либо пользоваться функцией DateTime::createFromFormat() там, где это возможно.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы