日期,Angularjs,WebAPI

时间:2017-10-26 19:03:11

标签: javascript angularjs date datetime asp.net-web-api

我们对如何处理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" });

我不希望我们的开发人员单独处理日期。我们最初是这样做的,代码中没有一致性。

1 个答案:

答案 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控件中的时间部分。