服务器收到的AngularJS日期比一天晚



我在我的项目中使用波斯语日期选择器,当我通过此组件选择日期时,存储在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();

在将日期发送到服务器并将formattedDateformattedDate2发送到服务器之前执行此操作。似乎在您调用$http.post完成以下操作之前,将您的日期转换为 JSON -

JSON.stringify(date) 

这会产生:2017-04-09T19:30:00.000Z,然后又被发送到服务器。

相关内容

  • 没有找到相关文章

最新更新