2009-02-23 31 views
15

這是一個多年來一次又一次重新發明的車輪。從用戶那裏獲取日期/時間輸入的最佳方法是什麼?

問題:用戶需要輸入一個日期/時間

基本考慮

  • 我們想讓它儘可能容易爲用戶輸入所需的日期/時間
  • 有些應用程序需要過去的日期,有些應用程序只需要將來的日期,有些需要同時處理
  • 我們希望防止用戶輸入亂碼數據
  • 我們希望儘可能積極地自動填充此控件。
  • 我們希望此控件儘可能重複使用。

流行的解決方案包括:

  • 文本框
  • 組合框
  • 通過彈出的日曆
  • 服務器端和/或客戶端驗證
  • 各種警報的方式關於壞數據的用戶

有關於即食食品的全面解決方案,但我正在尋找更多的一般信息。是否有任何有關各種日期 - 時間控制方法的可用性研究?那裏是否有「最佳」日期時間控制?有沒有完善的「Dos和Don'ts」?


相關問題:Best GUI control(s) to describe a time range

+2

+1用於使用單詞「panopoly」來描述這個! – 2009-02-23 21:11:31

+1

@Chris:是的,這比「過度」更好! – 2009-02-23 21:19:16

回答

12

給我一個日曆,用鼠標選擇日期。讓我用鍵盤輸入日期。接受盡可能多的格式。如果我需要進入2012年12月21日,讓我用:

  • 2012年12月21日
  • 21DEC2012
  • 12月21日2012
  • 2012年12月21日(或21/12/2012,挑一個,也許這取決於我使用的是哪個國家的軟件)
  • 12212012(括號一樣如上片段)
  • 等等

無論您決定如何解決本地化問題,請確保它明顯符合您的期望。給我一個例子,或者可以輸入MMDDYYYY的模板。

請不要給我下拉框,我不得不滾動,特別是多年。如果我年紀大了,而且我正在進入我的DOB,我的生活中沒有足夠的時間往下滾動到下拉框的底部。當我不知道選項是什麼時,下拉框是一個很好的模式,但如果這是我熟悉的東西,比如我的出生日期,那麼下拉菜單是一件麻煩事。

現在,WRT時間輸入(Big pet peeve),不要以爲我的意思是凌晨3點。如果我輸入3,那麼假設我的意思是下午3點。讓我在凌晨3點做額外的工作安排一些事情。如果您不適合以我的名義承擔這麼多事情,至少要提醒我已經預定了凌晨3點的時間,所以我現在可以修復它,而不是稍後當有人在我的活動邀請列表中發送電子郵件並說「你是白癡,你預定我們的D & D Meetup 3點!「

2

與圖像鏈接到一個側面的彈出式日曆的文本框是我的選擇。兩全其美。

如果你想要額外的東西,你可以讓自然語言的日期/時間解析器如Chronic http://chronic.rubyforge.org/爲它增色。

也別忘了國際用戶。

14

我的選擇是用一個省略號按鈕文本輸入旁邊:

Enter a date [  ] [...] 

的省略號會彈出一個日曆來填充文本輸入,但如果他們希望用戶可以鍵入日期。當按下表格的「確定」按鈕時,應該進行驗證 - 根據我的經驗,嘗試對每個字符的字符進行日期驗證註定。

驗證應該是複雜的,並允許這樣的表達式

"today" 
"Tomorrow" 
"23 Jan" 

等。

編輯:在回覆一些評論時,當文本編輯失去焦點時(雖然我討厭那種事情),編輯內容可能會從「23 Jan」更改爲「23- 01-2009「表示該表達式已被理解。

+1

如果沒有彈出窗口,日期驗證可能會有效,但顏色/粗體文本/這樣的東西會改變。不過,這是一個很好的提示,+1。 – mghie 2009-02-23 21:20:08

+0

是關於允許提供的樣本等表達式。如果我只是輸入「5」,我的意思是本月5日,今年,這一次,如果你需要時間,其他明智的沒有時間或午夜。用戶喜歡的另一個快捷鍵是2009年2月23日的022309。其中一些快捷鍵可以在數字鍵盤上快速打開。 – Bratch 2009-02-23 21:27:50

2

我建議你也允許喜歡打字而不是點擊日曆控件的用戶,所以文本框+彈出式日曆的組合很好。

我們用這樣的組合創建了一個自定義控件。用戶可以在文本框中以各種格式輸入日期,或者點擊按鈕彈出日曆。

我們允許各種輸入,比如「今天」,「結婚」或「+2」(後天),並使用大多數驗證客戶端的正則表達式。我們也做服務器端驗證當然。

該控件還有一個可選的文本框用於時間,可以通過屬性啓用或隱藏該文本框。我們覺得將日期與時間分開比較容易。有時候,我們允許「9pm」,「2100」,「09:00」等。

對照滿足最小和最大日期,以便出生日期可以具有從-100年到當前的範圍年,而信用卡到期時間可能會從當年到+5年不等,所以我們使用範圍驗證器。

0

我會去視情況而定三個備選:

  1. 2組合框。一個上市年份+月份,另一天
  2. 3個組合框。一個上市多年,一個月1天
  3. 可見日曆/ s和連擊like this one from YUI

而且我相信有更多的從我會選擇的選項。

0

您需要檢查您的用戶界面要求。如果您只需要支持腳本的支持,那麼您可以隨意使用任何腳本,並使用提供給隱藏字段的任何日期/時間格式運行。

但是,如果你需要在一個文本框,用戶條目,那麼你就面臨着一些決定:

  • 是日期/時間格式剛性?例如mm/dd/yyy hh:mm:ss格式?
  • 還是鬆散的定義,允許「今日」,「明天」,「1月23日」風格條目?
  • 格式是特定於語言環境的嗎?例如mm/dd/yyyy與dd/mm/yyyy

驗證方法取決於您對需求的決定。

我喜歡jQuery date-picker插件。它將允許以特定格式輸出。

0

我一直認爲谷歌日曆容易在這方面使用。你當然可以做得比試圖效仿它更糟糕。關鍵是要讓用戶在輸入信息方面有很大的靈活性。例如,我可以從下拉列表中選擇一個時間或手動輸入時間,當我輸入時,我不需要在「pm」中包含冒號或「m」。

1

如果您打算使用組合框/列表框選項,請確保您將月份讀取爲「Jan」,「Feb」...「Dec」而不是「1」,「2」.. 「12」。
根據值的範圍,必須找出哪個月份是哪個月份以及哪一天是相當煩人的。

0

我真的很喜歡QT4的日期/時間小部件的工作方式。

  • 您可以手動輸入日期(在日期中輸入常見格式)。
  • 您可以使用滾輪快速更改日期/時間字段。
  • 你有一個可擴展的日曆,有幾個月的下拉月份和向前/向後的箭頭。您可以點擊特定日期並手動輸入年份,或者使用組合框(滾輪也可以在此工作)。

這裏是一個簡短視頻(〜7.5MB),顯示瞭如何將小部件工作原理,以及它的一些特點是:Video Here

我希望任何複雜的應用程序有一些或所有這些功能。

能夠輸入相對日期(今天,上週,3天前)是方便的,但我不確定它有多實用,因爲標準問題如「您的出生日期?」或「你什麼時候想把X發送給你?」

4

我認爲Google日曆上的日期範圍條目相當不錯。您可以通過鍵盤或鼠標進行輸入。唯一的狡辯就是輸入不同年份的日期。

您可以通過鍵盤輕鬆完成任務,但他們應該在日曆上使用第二組小箭頭,一次使用鼠標來回跳轉一年。

Date Entry Example http://s5.tinypic.com/2qscw28.jpg

Time Entry Example http://s5.tinypic.com/3518f7q.jpg

編輯:在回答這個問題,「如果你要計劃,從晚上11點的推移週二至凌晨1時在週三的事件(比如每日構建,例如)?如何在午夜覆蓋時間?

如果」到「時間推遲到午夜,則將」到「日期滾到第二天。這只是組件業務邏輯的一部分。您會注意到在上面的第二張圖片中,下拉列表顯示了事件的結束時間和持續時間,這應該是一個提示。

alt text http://s5.tinypic.com/15hlb8m.jpg

如果你試圖把一個結束日期早於開始日期,您可以突出顯示字段的背景顏色和/或顯示在保存的錯誤消息。

alt text http://s5.tinypic.com/2yplphy.jpg

玩上Google Calendar,看看它是如何工作。

0

你可以使用插件cxcalendar。它看起來像其他日期選擇器。但您可以點擊年份 - 月份標題後選擇年份和月份。

enter image description here

相關問題