我在项目中使用persian-datepicker,当我通过此组件选择日期时,modelValue
中存储的值是这样的:Mon Apr 10 2017 00:00:00 GMT+0430 (Iran Daylight Time)
,但是当我发送此值时使用$http.post
到服务器,此值转换为:2017-04-09T19:30:00.000Z
,服务器端代码将此值解释为昨天,是否有人知道在这种情况下我该怎么办?我很担心这种行为。
答案 0 :(得分:3)
之前我没有使用过persian-datepicker
,但我在angular-ui-bootstrap datepicker
面对这个问题,我认为这是相关的。 angular-ui-bootstrap datepicker
使用 JavaScript Date 对象计算日期,因此序列化为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'
之类的日期而不进行任何转换。但是,如果您想使用UTC转换,请执行以下操作:
var formattedDate2 = date.getUTCFullYear() + '-' + (date.getUTCMonth() + 1) + '-' + date.getUTCDate();
在将日期发送到服务器并将formattedDate
或formattedDate2
发送到服务器之前执行此操作。似乎在您调用$http.post
之前完成了以下操作,将您的日期转换为JSON -
JSON.stringify(date)
产生:2017-04-09T19:30:00.000Z
然后被发送到服务器。