我有一个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
,因为用户确实选择了它。
知道为什么会这样吗?我读了一些答案,没有找到解释或解决方案。
答案 0 :(得分:0)
$ http转换的ISO字符串是正确的。因为你只需要一个解释:
在格林尼治标准时间+3时区的00:00时,GMT区域的时间是21:00。 ISO字符串代表格林威治标准时间区域时间,它比格林尼治标准时间+3小3小时,因此日期