AngularJs $ http将日期对象发送到服务器而没有时间偏移

时间:2018-01-14 10:43:46

标签: c# angularjs twitter-bootstrap datetime

我有一个AngularJs应用程序,其中一个页面有bootstrap日期时间选择器工具 这就是使用它的输入看起来像:

<input class="form-control"
   is-open="vm.search.openFromYear"
   name="txtfromYear"
   ng-click="vm.search.openFromYear = !vm.search.openFromYear"
   ng-init="vm.search.openFromYear = false"
   ng-model="vm.searchModel.fromYear"
   placeholder="dd/MM/yyyy"
   show-button-bar="false"
   type="text"
   uib-datepicker-popup="dd/MM/yyyy" />

当我选择日期时,我在输入中正确看到了,请说我选择了14/01/2017 ..

vm.searchModel.fromYear中,它以js日期对象的形式保存,日期值和时区Sun Jan 14 2018 00:00:00 GMT+0300 (Turkey Standard Time)

问题是当我将此邮件发送到服务器时,它由$http服务转换并由ajax发送,如:2018-01-13T21:00:00.000Z

正如您所看到的那样,有一天(由于转换为UTC格式,但没有时间偏移+3小时。

API接收此字符串并将其绑定到DateTime类型的属性,但实际上,日期将为2018-01-13,而不是2018-01-14,因为用户确实选择了它。

知道为什么会这样吗?我读了一些答案,没有找到解释或解决方案。

1 个答案:

答案 0 :(得分:0)

$ http转换的ISO字符串是正确的。因为你只需要一个解释:

在格林尼治标准时间+3时区的00:00时,GMT区域的时间是21:00。 ISO字符串代表格林威治标准时间区域时间,它比格林尼治标准时间+3小3小时,因此日期