簡體   English   中英

日期范圍:包容與嚴格界限

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM