【问题标题】:Date ranges: inclusive vs strict boundaries日期范围:包含与严格的界限
【发布时间】: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 小时。

但是,这只适用于 timestampdatetime 列。当列是 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


【解决方案1】:

我的个人偏见:

按照您认为用户会喜欢的方式对其进行编程,但始终在带有标签的 GUI 中明确选择包含与排除。而不是说

Between _____________ and ______________

我总是标记为

On or after _______________ but before _______________

On or after ______________ through ______________

(如果您正在编写一些用户每天都在使用的软件,并且您可以仔细训练他们,那么他们无论如何也不会阅读 GUI 标签,所以不要打扰。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多