我们对如何处理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" });
我不希望我们的开发人员单独处理日期。我们最初是这样做的,代码中没有一致性。
答案 0 :(得分:2)
以UTC身份发送和接收您的日期。在Web API中,您可以添加此项,以便假设DateTime
实例的属性Kind
设置为DateTimeKind.Utc
,发送的所有内容都将作为UTC发送。
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// add this to whatever code you have now
config.SetTimeZoneInfo(TimeZoneInfo.Utc);
}
从angularjs
发送日期为ISO8601格式为UTC yyyy-MM-ddTHH:mm:ss.fffffZ
。然后,您只需担心用于显示日期的任何UI控件中的时间部分。