日期格式不一致的跨浏览器&保存错误的日期

时间:2015-07-21 05:09:07

标签: jhipster

我使用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上的屏幕截图: on Google Chrome with curse in the field

这是Firefox上的屏幕截图: on FireFox

我使用最新版本的JHipster。

如何解决这些问题?

顺便说一句,如果没有那么多变化,我想使用Java 8日期库。

2 个答案:

答案 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代码带有默认日期过滤器。