【发布时间】:2011-11-21 18:17:55
【问题描述】:
我想在客户端使用服务器端的日期。
例如-如果服务器端的当前时间是'2011-09-21 15:00:00',我希望能够获得具有该值的javascriptDate对象('15:00:00') ,即使客户端位于不同的时区。
到目前为止我尝试过的:
假设服务器时间为“15:00:00”,客户端时间为“17:00:00”,由于某种原因,我在客户端获取的Date 对象始终包含“16:00:00”。
这是我尝试过的:
1. 向客户端发送一个 .net DateTime 对象(它被序列化为
"Date\12345...\"),并在客户端将其转换为 Date 对象:
function parseServerDate(strDate) {
return new Date(parseInt(strDate.substr(6)));
}
或将 .net DateTime 对象转换为 UTC 数字:
// returns the number of milliseconds since Jan 1, 1970 (useful for converting C# dates to JS dates)
public static double UnixTicks(this DateTime dateTime)
{
DateTime epoch = new DateTime(1970, 1, 1);
DateTime d2 = dateTime.ToUniversalTime();
TimeSpan ts = new TimeSpan(d2.Ticks - epoch.Ticks);
return ts.TotalMilliseconds;
}
然后创建一个新的Date 对象:new Date(milliseconds) 或new Date().setTime(milliseconds),两者都产生了与上述相同的结果。
我是否应该也发送服务器的时区偏移量,并处理客户端的差异?
最好的方法是什么?
【问题讨论】:
-
在客户端创建的日期对象将在客户端的时区中,即它们将使用客户端的时区偏移量。您可以手动更改时区偏移量,或者您可以创建一个与服务器上的时间匹配的日期对象并忽略偏移量,除非您尝试在客户端和服务器之间进行日期运算。
标签: javascript .net datetime localization timezone