Angularjs 如何正确处理发送到服务器和返回的日期
我刚刚了解到JavaScript日期对象显然总是存储本地时区偏移量。将此类日期发布到服务器(例如使用$http.post)时,服务器将获得UTC日期(本地日期减去时区偏移量)。这当然是对的。在我的例子中,服务器将日期存储在数据库中 从服务器获取日期时(例如使用$http.get),服务器会发回UTC日期。如果我直接将这些日期绑定到视图,视图将显示错误的日期(UTC日期)。为了避免这种情况,我发现必须向模型中写入一个新的日期实例,传递从服务器获取的日期 问题是这需要做大量的工作,特别是当服务器发送一个实际上应该直接绑定到视图的模型时Angularjs 如何正确处理发送到服务器和返回的日期,angularjs,datetime,Angularjs,Datetime,我刚刚了解到JavaScript日期对象显然总是存储本地时区偏移量。将此类日期发布到服务器(例如使用$http.post)时,服务器将获得UTC日期(本地日期减去时区偏移量)。这当然是对的。在我的例子中,服务器将日期存储在数据库中 从服务器获取日期时(例如使用$http.get),服务器会发回UTC日期。如果我直接将这些日期绑定到视图,视图将显示错误的日期(UTC日期)。为了避免这种情况,我发现必须向模型中写入一个新的日期实例,传递从服务器获取的日期 问题是这需要做大量的工作,特别是当服务器发送
我正在寻找一种方法,以避免为我从控制器中的服务器获得的模型的每个日期属性创建日期实例。我创建了这个可以在客户端上运行的函数,该函数根据当前时区偏移量调整日期。将调整后的日期发送到服务器时,从post数据解析的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;
}
您在服务器端使用哪种语言?哪个平台?我使用.NET和C#和ASP.NET Web API(REST控制器)。我将日期存储在不包含时区偏移量的DateTime对象中。您可以使用c#在服务器端操纵日期。然后将所需/转换的日期返回到.js端。(日期操纵很无聊)没想到。这可能是一种黑客行为,但编程要比JavaScript容易得多。问题只是我必须知道客户端使用的时区偏移量。可以将其作为附加参数传递。有趣…我猜你正在构建一个应用程序,可能有来自不同时区的用户同时访问你的服务器,你会希望客户端接收他们各自的偏移时间。由于您将.NET与C#一起使用,我建议您使用
DateTimeOffset
而不是DateTime
,您将获得瞬时时间的表示形式。这是一本好书:谢谢,但这正是我想要避免的。我使用来自服务器的AngularJS模型,该模型直接绑定到视图。我需要在获得模型后转换模型的每个日期,并在发送之前转换回来。这就是我想要避免的工作。