Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 日期、Angularjs、WebAPI_Javascript_Angularjs_Date_Datetime_Asp.net Web Api - Fatal编程技术网

Javascript 日期、Angularjs、WebAPI

Javascript 日期、Angularjs、WebAPI,javascript,angularjs,date,datetime,asp.net-web-api,Javascript,Angularjs,Date,Datetime,Asp.net Web Api,关于如何处理Angularjs和WebAPI之间的日期,我们一直存在一些真正的困惑。我们只关心日期,不关心时间或时区。angular站点将日期对象发布回api,但日期对象上仍然有时区,因此,根据用户所在的位置,保存的日期会减少一天 我不想一个接一个地处理这些日期,所以我们为所有的put和post设置了一个http拦截器,该拦截器在所有表单字段中循环,去掉时区,只返回日期,但这感觉不对 关于处理这个问题的最佳方法有什么建议吗 更新: 如果有帮助,请提供更多详细信息。我们正在使用剑道日期选择器,并使

关于如何处理Angularjs和WebAPI之间的日期,我们一直存在一些真正的困惑。我们只关心日期,不关心时间或时区。angular站点将日期对象发布回api,但日期对象上仍然有时区,因此,根据用户所在的位置,保存的日期会减少一天

我不想一个接一个地处理这些日期,所以我们为所有的put和post设置了一个http拦截器,该拦截器在所有表单字段中循环,去掉时区,只返回日期,但这感觉不对

关于处理这个问题的最佳方法有什么建议吗

更新:

如果有帮助,请提供更多详细信息。我们正在使用剑道日期选择器,并使用k-ng-model设置模型值。这有助于我们获取有效的日期对象。今天,我删除了拦截器并添加了以下内容:

               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发送和接收您的日期。在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
以UTC
yyyy-MM-ddTHH:MM:ss.fffffff z格式发送日期。然后,您只需担心用于显示日期的任何UI控件中的时间部分。

您应该使用UTC日期。在不将日期转换为UTC的情况下剥离时区可能会导致更多的错误。你想得太多了。UTC表示所有时间,忽略时间。我认为Jon的情况令人困惑,因为他的api希望给定字段是
(这是
时间范围
),而不是
日期时间
,这是
时刻
。因此,我们应该使用
时刻
来表示听起来不正确的
,还是使用两个
时刻
来表示
,这是一个
时间范围
还是有更好的方法?不管怎样,无论我用什么语言,日期通常都有令人困惑的实现,但值得讨论。