如果我的用户在加利福尼亚州并且他们的计算机设置为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
认为这会有效吗?或者两者都会同时返回?
答案 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)并比较两者。