AngularJS 服务器收到的日期晚了一天
AngularJS date received at server is one day behind
我在我的项目中使用 persian-datepicker,当我通过这个组件选择日期时,存储在 modelValue
中的值是这样的:Mon Apr 10 2017 00:00:00 GMT+0430 (Iran Daylight Time)
,但是当我发送使用 $http.post
将此值发送给服务器,此值将转换为:2017-04-09T19:30:00.000Z
并且服务器端代码将此值解释为昨天,有人知道在这种情况下我应该怎么做吗?我对这种行为感到很困惑。
我以前没有使用过 persian-datepicker
,但我在 angular-ui-bootstrap datepicker
上遇到过这个问题,我认为这是相关的。 angular-ui-bootstrap datepicker
使用 JavaScript 日期 对象来计算日期,因此它序列化为 UTC 日期时间字符串。
在本机中 angular-ui-bootstrap datepicker
你可以这样做:
ng-model-options="{timezone: 'utc'}"
获取不计算时区的日期选择器。
根据这个 persian-datepicker 问题,似乎也支持 ng-model-options
。如果是这样,那么您可以尝试:
<input
uib-datepicker-popup
ng-model="modelValue"
ng-model-options="{timezone: 'utc'}">
参考这个 Similar Question 的想法。
编辑:手动转换日期
如果persian-datepicker
不支持以上方法,那就试试这个方法。
在将 modelValue
中的日期转换为 日期对象后 例如
var date = new Date(modelValue);
那么您可以进行如下操作:
var formattedDate = date.getFullYear() + '-' + (date.getMonth() + 1) + '-' + date.getDate();
这会给你一个类似 '2017-4-10'
的日期,没有任何 conversion.However,如果你想使用 UTC 转换,请这样做:
var formattedDate2 = date.getUTCFullYear() + '-' + (date.getUTCMonth() + 1) + '-' + date.getUTCDate();
在将日期发送到服务器之前执行此操作,然后将 formattedDate
或 formattedDate2
发送到服务器。似乎在调用 $http.post
之前完成了以下操作,将日期转换为 JSON -
JSON.stringify(date)
产生:2017-04-09T19:30:00.000Z
然后发送到服务器。
我在我的项目中使用 persian-datepicker,当我通过这个组件选择日期时,存储在 modelValue
中的值是这样的:Mon Apr 10 2017 00:00:00 GMT+0430 (Iran Daylight Time)
,但是当我发送使用 $http.post
将此值发送给服务器,此值将转换为:2017-04-09T19:30:00.000Z
并且服务器端代码将此值解释为昨天,有人知道在这种情况下我应该怎么做吗?我对这种行为感到很困惑。
我以前没有使用过 persian-datepicker
,但我在 angular-ui-bootstrap datepicker
上遇到过这个问题,我认为这是相关的。 angular-ui-bootstrap datepicker
使用 JavaScript 日期 对象来计算日期,因此它序列化为 UTC 日期时间字符串。
在本机中 angular-ui-bootstrap datepicker
你可以这样做:
ng-model-options="{timezone: 'utc'}"
获取不计算时区的日期选择器。
根据这个 persian-datepicker 问题,似乎也支持 ng-model-options
。如果是这样,那么您可以尝试:
<input
uib-datepicker-popup
ng-model="modelValue"
ng-model-options="{timezone: 'utc'}">
参考这个 Similar Question 的想法。
编辑:手动转换日期
如果persian-datepicker
不支持以上方法,那就试试这个方法。
在将 modelValue
中的日期转换为 日期对象后 例如
var date = new Date(modelValue);
那么您可以进行如下操作:
var formattedDate = date.getFullYear() + '-' + (date.getMonth() + 1) + '-' + date.getDate();
这会给你一个类似 '2017-4-10'
的日期,没有任何 conversion.However,如果你想使用 UTC 转换,请这样做:
var formattedDate2 = date.getUTCFullYear() + '-' + (date.getUTCMonth() + 1) + '-' + date.getUTCDate();
在将日期发送到服务器之前执行此操作,然后将 formattedDate
或 formattedDate2
发送到服务器。似乎在调用 $http.post
之前完成了以下操作,将日期转换为 JSON -
JSON.stringify(date)
产生:2017-04-09T19:30:00.000Z
然后发送到服务器。