天天看點

Bootstrap中datetimepicker日期控件1899年問題解決

 Bootstrap中datetimepicker日期控件1899年問題解決

  最近在開發項目的過程中,遇到一個很尴尬的問題。我們項目一直采用的是angular+bootstrap,日期控件用的是bootstrap中的datetimepicker,這個日期控件存在一個bug,當使用者輸入日期時,日期控件會自動跳到1899年,這個使用者體驗特别不好,一不小心就可能點錯了。因為我們的項目中涉及的日期非常多,是以上司強烈要求我們前端解決這個問題,并且需要支援yyyy-MM-dd、yyyy/MM/dd、yyyy.MM.dd、yyyyMMdd等四種格式的相容。作為前端中的一員,我不遺餘力去從網上找答案,在百度上找了好幾天,沒有結果。就在最後,我忽然想到了github,在這上面我找到了我想要的答案。下面和大家分享一下。

  一、存在問題

    當使用者輸入日期時,控件會自動跳到1899年。至于為什麼是1899年,老大說,1899是控件支援的最小日期。我還以為是1899年誕生的(可笑)。

  

Bootstrap中datetimepicker日期控件1899年問題解決

  二、解決方法

  1、修改bootstrap-datetimepicker源碼

    将控件預設的1899年改為預設目前日期。

Bootstrap中datetimepicker日期控件1899年問題解決

  2、支援的多種格式

    其實datetimepicker預設支援yyyy-MM-dd、yyyy/MM/dd、yyyy.MM.dd三種日期格式,另外一種yyyyMMdd需要我們自己在代碼中實作。

    我實作的方法是當使用者輸完日期後,用正規表達式,将八位數轉換為yyyy-MM-dd日期格式。

1 var regex = /^(\d{4})(\d{2})(\d{2})$/;
2 return date.replace(regex, "$1-$2-$3");      

  3、需要注意的問題

  datetimepicker屬性forceParse,   Boolean. 預設值: true

  當選擇器關閉的時候,是否強制解析輸入框中的值。也就是說,當使用者在輸入框中輸入了不正确的日期,選擇器将會盡量解析輸入的值,并将解析後的正确值按照給定的格式

format

設定到輸入框中。這個屬性就預設支援yyyy-MM-dd、yyyy/MM/dd、yyyy.MM.dd三種日期格式轉換為自定義的格式。

  經過這個問題,我突然發現,每次解決問題,我找答案的途徑都太單一,每次都是當我快要放棄的時候,才會想到其他的途徑。緻自己一句話,沒有什麼是github上沒有的,時刻把github放心裡。