获取客户端和服务器之间的时区差异

时间:2010-09-01 19:26:57

标签: c# .net javascript asp.net

如果我的用户在加利福尼亚州并且他们的计算机设置为PST,则那是下午1:00。如果我的服务器设置为EST,则当前服务器时间是下午4:00。

我需要一种方法来获取客户端和服务器之间的时区差异,无论是在Javascript还是C#中。在我的例子中,我会得到3(或-3,无所谓)。

有谁知道怎么做?

编辑:RedFilter的可能解决方案

在javascript中完成所有操作:

serverDate = new Date('<%= DateTime.Now.ToString() %>');
clientDate = new Date();
diffMin = (serverDate.getTime()-clientDate.getTime())*1000*60;  //get difference in minutes

认为这会有效吗?或者两者都会同时返回?

4 个答案:

答案 0 :(得分:13)

你可以:

1 - 将服务器日期作为Javascript日期变量返回给客户端 2 - 创建新的javascript日期客户端(var currentTime = new Date();)并减去上述日期
3 - 将结果发回服务器(如果需要,您可能只需要知道客户端的区别)。

<强>更新

以下是一个例子:

serverDate = new Date('<%= DateTime.Now.ToString() %>'); 
clientDate = new Date(); 
diffMin = (serverDate.getTime()-clientDate.getTime())/(1000*60);
alert("serverDate: " + serverDate + "\r\n" + "clientDate: " + clientDate + "\r\n" +
  "diffMin: " + diffMin);

如果服务器和客户端位于同一台计算机上,您将看到diffMin接近零。由于生成日期的服务器端脚本与浏览器解析和执行javascript之间的时间,日期之间存在细微差别。

//这对我很有用 - DateTime.Now.ToString(“yyyy-MM-ddTHH:mm:ss”)

答案 1 :(得分:1)

您需要知道位置或机器的时区吗?

如果您需要知道该位置的时区,那么您最好的选择是订阅Geo-IP服务,并检查IP,然后检查该位置的时区(有公开的数据库)。由于IP地理信息不能得到保证,因此无法保证(这绝对不仅仅是理论上缺乏保证,而且信息不足也很多)。

通常,您真正想要的是客户端计算机的时区设置。对于大多数服务我觉得如果我在旅​​行并且有一个网站认为我在与我工作的时间不同的时候会感到烦恼(如果我不长时间不使用它,我会坚持我的家乡时区)。

这很容易在客户端完成。 new Date().getTimezoneOffset()返回UTC与当地时间之间的分钟数。例如。目前我在爱尔兰夏令时(GMT + 1小时夏令时),它返回-60。

您可以轻松地将其放入图片或XHR请求使用的URI中,或将其放入Cookie值。

答案 2 :(得分:1)

这个问题一直困扰着我:我也遇到类似的问题,但是我正在服务器端运行并运行node.js AWS Lambda。我不能接受我需要将时间从客户端传递到服务器(或者反之亦然)。我知道时区,javascript知道转换它们的规则,为什么我需要来回传递它?我所做的只是计算无论什么日期的两个时区之间的差异。在下面,它设置为在美国的UTC和时区之间进行转换,这些时间永远不会有部分小时,因此我将其设置为整数小时,但是如果您需要工作,则需要重新进行操作带有印度等不规则时区的时间。您需要舍入,因为还有剩余的毫秒数(我怀疑这与铯的衰减率有关,而不与舍入误差有关-不确定不在乎)。

请注意,这是在服务器端运行的(但是相反的方法显然可以工作),并且我的服务器运行的是UTC。另外请注意,在初始化第一个日期变量时,您需要将日期设置为所需的偏移日期,因为它们可以每天更改。

var UTCTime = new Date();
var pacificTime = new Date(UTCTime.toLocaleString("en-US",{timeZone: "America/Los_Angeles"}));
var offset = Math.round((UTCTime-pacificTime)/1000/60/60,0);
console.log(offset); // returns 7 (during daylight saving time)

希望这可以帮助某人...

答案 3 :(得分:0)

检查时区差异的一个好方法是知道时间所在的时区(位置)。 如果你可以在客户端和服务器端获得它,你可以检查TimeZoneInfo类(我认为需要3.5) TimeZoneInfo from Koders

将客户端和服务器时间与关联区域转换为UTC(ConvertTimeZoneToUtc)并比较两者。