【发布时间】:2017-10-26 19:03:11
【问题描述】:
对于如何处理 Angularjs 和 WebAPI 之间的日期,我们一直有一些真正的困惑。我们只关心日期,不关心时间或时区。角度站点将日期对象发布回我们的 api,但日期对象上仍然有时区,因此,根据用户所在的位置,保存的日期会相差一天。
我宁愿不必逐个处理这些日期,所以我们为所有的 put 和 post 放置了一个 http 拦截器,它循环通过所有表单字段并剥离时区日期并只返回日期但是这感觉不对。
关于处理此问题的最佳方法有什么建议吗?
更新:
如果有帮助,请提供更多详细信息。我们正在使用 kendo 日期选择器并使用 k-ng-model 设置模型值。这有助于我们获得一个有效的 Date 对象。今天我删除了拦截器并添加了以下内容:
kendo.ui.DatePicker.prototype.valueOld = kendo.ui.DatePicker.prototype.value;
kendo.ui.DatePicker.prototype.value = function (e) {
var val = this._value;
if (val != null) {
this._value = moment(val).format("YYYY-MM-DD");
}
return this.valueOld(e);
}
现在,当用户更改日期时,模型值将只是日期,而时区在发送回 API 时会被忽略。
在将日期发送到前端的 API 中,我们有一个格式化程序,它也去除了时区:
config.Formatters.JsonFormatter.SerializerSettings.Converters.Add(
new IsoDateTimeConverter() { DateTimeFormat = "yyyy-MM-dd" });
我不希望我们的开发人员单独处理日期。我们最初是这样做的,代码中没有一致性。
【问题讨论】:
-
您应该使用 UTC 日期。剥离时区而不将日期转换为 UTC 可能会导致更多错误。
-
你想多了。 UTC 一切,忽略时间。
标签: javascript angularjs date datetime asp.net-web-api