Диапазоны дат: включительно против строгих границ - PullRequest
4 голосов
/ 01 октября 2010

Позволяя пользователю выбрать диапазон дат, скажем:

Показать записи от [ 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, чтобы захватить до этой даты, что не соответствует пользовательскому интерфейсу, но имеет смысл для меня: где вы рисуете эту линию?

1 Ответ

7 голосов
/ 01 октября 2010

Мой личный уклон:

Запрограммируйте его так, как вы думаете, пользователям понравится, но ВСЕГДА делайте инклюзивный или эксклюзивный выбор в графическом интерфейсе с маркировкой. Вместо того, чтобы говорить

Between _____________ and ______________

Я всегда отмечаю как

On or after _______________ but before _______________

или

On or after ______________ through ______________

(Если вы пишете программное обеспечение, которым несколько пользователей пользуются каждый день, и вы можете тщательно их обучать, то они все равно не будут читать метки GUI, так что не беспокойтесь.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...