Позволяя пользователю выбрать диапазон дат, скажем:
Показать записи от [ 1 августа ] до [ 1 сентября ]
Как пользователь, я, как правило, ожидаю, что это будет включать результаты за 1 сентября. Особенно, если учесть, что когда я выбираю одну и ту же дату для обоих концов, я, очевидно, имею в виду «от начала дня до конца дня»:
Показать записи с [ 1 сентября ] до [ 1 сентября ]
Как программист, я считаю границы дат «нулевым часом», то есть «началом дня»; логически, записи на 1 сентября фактически после"2010-09-01 00:00:00" (следовательно, вне диапазона).
Например, в SQL следующее условие исключало бы все:
SELECT * FROM entries
WHERE created_at >= DATE('2010-09-01') AND created_at <= DATE('2010-09-01')
Очевидно, что необходимо внести корректировку из пользовательского ввода в SQL, чтобы продлить дату окончания на 24 часа.
Однако это относится только к метка времени или дата / время столбцы. Если столбец имеет значение date , тогда выполняется прямое сравнение, и эту корректировку добавлять не следует.
В среде MVC, такой как Rails, где вы обрабатываете логику для этого несоответствия ввода перед отправкой запроса? Если он находится в контроллере, кажется, что он слишком полагается на знание внутренних полей модели (дата против даты и времени), и если он в модели, будет ли метод "find_in_date_range" рассматриваться как включающий, или он просто приглашает ошибки за день?
Наконец, верно ли мое предположение о том, что пользовательский интерфейс представляет включающие диапазоны? Всегда ли это так или существуют ситуации, когда более строгая (исключительная) граница даты более уместна? Например, в моих сценариях рейка я использую параметр END_DATE=2010-09-01
, чтобы захватить до этой даты, что не соответствует пользовательскому интерфейсу, но имеет смысл для меня: где вы рисуете эту линию?