【发布时间】:2018-01-14 10:43:46
【问题描述】:
我有一个 AngularJs 应用,其中一个页面有引导日期时间选择器工具。
这就是使用它的输入的样子:
<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,因为用户确实选择了它。
知道为什么会这样吗?我阅读了一些答案,但没有找到解释或解决方案。
【问题讨论】:
-
您的后端没有考虑 UTC。前端没毛病
-
看看
console.log(new Date('2018-01-13T21:00:00.000Z'))显示了什么 -
在客户端它会正确显示,因为浏览器会考虑时区,但在服务器上它根本不知道偏移量,因为它没有在发送给它的日期字符串值中提及。
-
是的。
Z是祖鲁语,这意味着它是格林威治标准时间 -
对,但是客户端比格林威治标准时间早 +3 小时,我在发送到服务器的字符串中看不到 +3 值,我错过了什么吗?
标签: c# angularjs twitter-bootstrap datetime