我以前没有使用过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.000Zthat 又被发送到服务器。