[英]Date ranges: inclusive vs strict boundaries
允許用戶選擇日期范圍時,可以說:
向我顯示從[ 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小時。
但是,這僅適用於時間戳或日期 時間列。 如果該列是日期,則可以進行直接比較,並且不應添加此調整。
在Rails這樣的MVC框架中,在發送查詢之前,應在哪里處理此輸入不匹配的邏輯? 如果在控制器中,則似乎過多地依賴於了解模型的內部字段(日期與日期時間),並且如果在模型中,則將“ find_in_date_range”方法理解為包含性的,還是只是邀請了日常錯誤?
最后,我的假設對於讓用戶界面代表包含范圍是正確的嗎? 總是這樣嗎?還是存在一些嚴格的(排他性的)日期邊界更合適的情況? 例如,在我的rake腳本中,我使用參數END_DATE=2010-09-01
捕獲截至該日期,該日期與UI不一致,但對我來說很有意義:您在哪里畫這條線?
我的個人偏見:
對其進行編程,但是您認為用戶會喜歡它,但是始終在帶有標簽的GUI中明確顯示包含或不包含選擇。 而不是說
Between _____________ and ______________
我總是標為
On or after _______________ but before _______________
要么
On or after ______________ through ______________
(如果您正在編寫一些用戶每天都在使用的軟件,並且可以仔細地培訓他們,那么他們無論如何都不會閱讀GUI標簽,因此不必理會。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.