我使用JHipster开箱即用的Joda Date类型的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>
以下是Google Chrome上的屏幕截图:
这是Firefox上的屏幕截图:
我使用最新版本的JHipster。
如何解决这些问题?
顺便说一句,如果没有那么多变化,我想使用Java 8日期库。
答案 0 :(得分: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”,最终保存在您的数据库中。
那么,如果您(部分)使用日期时间而不仅仅是localdate,那么您应该检查一下吗?
对于这两种情况,我会检查浏览器和其他端点之间发送的内容,因此您可以将问题隔离到服务器和/或javscript / html问题。
<强>更新强>
chrome和IE / Firefox之间的区别在于chrome的特殊处理,因为它提供了日期输入的内置日期选择器。默认日期格式取自本地系统设置。看这里: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中没有datepicker的原因。
所以,你必须自己为IE / Firefox添加一个日期选择器,例如使用jquery,modernizr或angular指令。
答案 1 :(得分:0)
对于日期格式问题,我了解a date format filter is needed in AngularJS code日期或时间字段。因此,它优于生成的默认AngularJS代码带有默认日期过滤器。