如何正确处理发送到服务器并返回的日期

时间:2014-08-21 16:48:07

标签: angularjs datetime

我刚刚了解到JavaScript Date对象显然总是存储本地时区偏移量。将此类日期发布到服务器时(例如,使用$ http.post),服务器将获取UTC日期(本地日期减去时区偏移量)。那当然是对的。在我的例子中,服务器将日期存储在数据库中。

从服务器获取日期时(例如使用$ http.get),服务器会发回UTC日期。如果我将这些日期直接绑定到视图,则视图会显示错误的日期(UTC日期)。为了避免这种情况,我发现我必须在模型中写一个新的Date实例,并传递我从服务器获得的日期。

问题是这是很多工作,特别是如果服务器发送的实际应该直接绑定到视图的模型。

我正在寻找一种方法来避免为我从控制器中的服务器获取的模型的每个日期属性创建日期实例。

1 个答案:

答案 0 :(得分:1)

我创建了这个可以在客户端上运行的功能,它可以通过当前时区偏移来调整日期。当调整后的日期发送到服务器时,从发布数据解析的DateTime对象将表示与客户端UI上看到的相同(本地)日期:

        adjustDateByTimezoneOffset: function (date) {

            // Javascript Date object stores the local timezone offset.
            // On tranmission to the server the UTC date is sent. The server 
            // may not be timezone aware, and so this function facilitates
            // adjusting to a date which can then be sent to a .NET web application and
            // be recieved as a DateTime instance that equals the current (local) time on 
            // the client.

            if (date && (date instanceof Date)) {

                var timezoneOffsetMinutes = date.getTimezoneOffset();

                var setMinutes = date.getMinutes() - timezoneOffsetMinutes;

                date.setMinutes(setMinutes);
            }
            else {

                throw "Input variable must be Date";
            }

            return date;
        }