我在我的项目中使用波斯语日期选择器,当我通过此组件选择日期时,存储在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 Date对象来计算日期,因此它序列化为 UTC 日期时间字符串。
在本机angular-ui-bootstrap datepicker
中,您可以执行以下操作:
ng-model-options="{timezone: 'utc'}"
获取不计算时区的日期选择器。
根据这个波斯日期选择器问题,似乎也支持ng-model-options
。如果是这样,那么您可以尝试:
<input
uib-datepicker-popup
ng-model="modelValue"
ng-model-options="{timezone: 'utc'}">
有关想法,请参阅此类似问题。
编辑:手动转换日期
如果persian-datepicker
不支持上述内容,请尝试此方法。 将modelValue
中的日期转换为日期对象后,例如
var date = new Date(modelValue);
然后,您可以执行以下操作:
var formattedDate = date.getFullYear() + '-' + (date.getMonth() + 1) + '-' + date.getDate();
这将为您提供一个像'2017-4-10'
这样的日期,没有任何转换。但是,如果您想使用 UTC 转换,请执行以下操作:
var formattedDate2 = date.getUTCFullYear() + '-' + (date.getUTCMonth() + 1) + '-' + date.getUTCDate();
在将日期发送到服务器并将formattedDate
或formattedDate2
发送到服务器之前执行此操作。似乎在您调用$http.post
完成以下操作之前,将您的日期转换为 JSON -
JSON.stringify(date)
这会产生:2017-04-09T19:30:00.000Z
,然后又被发送到服务器。