【发布时间】:2011-04-19 13:36:50
【问题描述】:
当允许用户选择日期范围时,假设:
显示从 [8 月 1 日] 到 [9 月 1 日]的条目
作为用户,我通常希望这包括 9 月 1 日的结果。特别是当您考虑到当我为两端选择相同的日期时,我显然是指“从一天开始到一天结束”:
显示从 [9 月 1 日] 到 [9 月 1 日] 的条目
作为一名程序员,我认为日期边界是“零时”,即“一天的开始”;从逻辑上讲,9 月 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 小时。
但是,这只适用于 timestamp 或 datetime 列。当列是 date 时,直接比较有效,不应添加此调整。
在诸如 Rails 之类的 MVC 框架中,在发送查询之前,您在哪里处理这种输入不匹配的逻辑?如果它在控制器中,似乎过于依赖了解模型的内部字段(日期与日期时间),如果它在模型中,“find_in_date_range”方法是否会被理解为包容性,或者这只是邀请非每日错误?
最后,我的假设对于让用户界面表示包含范围是否正确?是否总是如此,或者是否存在严格(排他性)日期边界更合适的情况?例如,在我的 rake 脚本中,我使用参数 END_DATE=2010-09-01 来捕获 up to 这个日期,这与 UI 不一致,但对我来说很有意义:你在哪里画这条线? p>
【问题讨论】:
-
最后,我的假设对于让用户界面表示包含范围是否正确? - 是的,对于用户来说,“9 月 1 日”是一整天的时间范围,不是日期时间列的特定时间点。
标签: sql ruby-on-rails model-view-controller datetime user-interface