2015-07-21 57 views
0

我使用JHipster開箱即用的Joda日期類型的LocalData。該字段在Google Chrome上以mm/dd/yyyy格式顯示。創建新數據時,「mm/dd/yyyy」將顯示在現場。然而,在IE和Firefox上,數據格式爲yyyy-mm-dd。創建新數據時,日期字段中沒有日期格式指示符。日期格式不一致的跨瀏覽器和不正確的日期已保存

我注意到的另一個問題是,提交表單後的日期將提前一天。例如,如果我輸入1986-11-12,則將1986-11-11保存到DB中。這發生在所有三種瀏覽器上。我認爲這不是另一個問題的前端。

的以下是不作任何修改通過JHipster產生相關的html代碼:

<div class="form-group"> 
     <label translate="myApp.profile.dob" for="field_dob">Dob</label> 
     <input type="date" class="form-control" name="dob" id="field_dob" 
       ng-model="profile.dob" required> 

     <div ng-show="editForm.dob.$invalid"> 
      <p class="help-block" 
       ng-show="editForm.dob.$error.required" translate="entity.validation.required"> 
       This field is required. 
      </p> 
     </div> 
</div> 

下面是關於谷歌瀏覽器的屏幕截圖: on Google Chrome with curse in the field

,這裏是在Firefox的屏幕截圖: on FireFox

而且我使用最新版本的JHipster。

如何解決這些問題?

順便說一句,我想使用Java 8日期庫,而不是那麼多的改變。

回答

0

您使用哪種輸入字段?

<input type="text" name="thedate"> 

<input type="date" name="thedate"> 

或其他什麼東西?

數據庫問題可能是由於錯誤的時區,我假設你不僅保存日期,而且時間?!

當您添加例如1986-11-12時,服務器將其轉換爲1986-11-12 00:00:00。如果您使用本地時間(例如UTC + 2又名CEST - 歐洲中部夏令時),則您的服務器將其轉換爲「1986-11-11 22:00:00」,並最終保存在您的數據庫中。

那麼,你應該檢查,如果你(部分)使用datetime而不是localdate?

對於這兩種情況,我都會檢查瀏覽器和其他端點之間發送的內容,以便將問題隔離到服務器和/或javscript/html問題。

更新

Chrome和IE/Firefox的之間的差異是由於鉻特殊處理,因爲它提供了一個內置的日期選擇器的日期輸入。默認日期格式取自本地系統設置。看這裏:https://developers.google.com/web/updates/2012/08/Quick-FAQs-on-input-type-date-in-Google-Chrome

該值(原始格式)的實際格式始終是yyyy-mm-dd(根據html rfc)。這也在chrome中,只有演示文稿通過chrome更改。由於IE和Firefox不提供內置日期選擇器,因此在那裏使用原始格式。這就是爲什麼有不同的格式,以及爲什麼IE或Firefox中沒有日期選擇器。

因此,您必須自行爲IE/Firefox添加日期選擇器,例如使用jquery,modernizr或角度指令。

+0

我在我的問題中添加了HTML代碼部分。輸入數據類型是日期。昨天晚上我很注意日期問題,並沒有通過調試來研究它。 – vic

+0

更新了我的答案! – Indivon

+0

感謝您的信息。我認爲大自然的選擇是從JHipster已經出現的angular-bootstrap中獲得datepicker。儘管有一些編碼。 – vic