有没有办法在服务器端做你的时区偏移量,通过读取HTTP请求中的某些内容,而不是将所有内容发送给客户端并让它处理它?你可以根据请求变量确定时区吗?
回答
这比较复杂,但之前我不得不诉诸于这种情况,因为机器和用户配置文件设置有时不符合访问者的偏好。例如,英国访问者从澳大利亚服务器临时访问您的网站。
使用地理定位服务,通过@balabaster建议(例如MaxMind.com),让他们匹配的IP区(Global.Session_Start是最好的)。这对当地的互联网服务提供商来说非常适合,但对美国在线来说并不是那么好。将此偏移量存储在会话cookie中。
或者在用户进入网站时使用JavaScript获取时区偏移作为表单提交/重定向的一部分。这是浏览器的当前偏移量,但不一定是访问者的首选区域。将此值用作默认值;存储在另一个会话cookie中。
<script type="text/javascript" language="JavaScript"> var offset = new Date(); document.write('<input type="hidden" id="clientTzOffset" name="clientTzOffset" value="' + offset.getTimezoneOffset() + '"/>'); </script>
允许访问者通过更新持久性Cookie在他们的帐户轮廓的区域(匿名用户)和字段(如认证)。
持久值#3覆盖了会话值。您还可以在登录之前为经过身份验证的用户存储相同的永久性Cookie以显示时间。
在页面卸载... Request.ServerVariables之前的任何事件中。如果你想要他们的物理时区,那么你检查他们的IP地址,并使用IP到地理位置转换工具。
我不知道是否有另一种方式,你可以做到这一点,所以如果你需要他们的计算机配置的时区,那就要等待一个JavaScript的网页加载...
检查detect_timezone.js - 做了不错的工作,确定用户的时区
我特别寻找服务器端解决方案,以便我可以在基于时区的缓存代码中实际执行某些操作。这与我最终使用的解决方案类似,并且使后端代码不在意,但将偏移作为客户端请求的一部分很好。 – DevelopingChris 2011-07-22 14:53:09
我们可以使用下面的代码在服务器端,而不是从客户端发送的值获得的时区。
private TimeZoneInfo GetRequestTimeZone()
{
TimeZoneInfo timeZoneInfo = null;
DateTimeOffset localDateOffset;
try
{
localDateOffset = new DateTimeOffset(Request.RequestContext.HttpContext.Timestamp, Request.RequestContext.HttpContext.Timestamp - Request.RequestContext.HttpContext.Timestamp.ToUniversalTime());
timeZoneInfo = (from x in TimeZoneInfo.GetSystemTimeZones()
where x.BaseUtcOffset == localDateOffset.Offset
select x).FirstOrDefault();
}
catch (Exception)
{
}
return timeZoneInfo;
}
谢谢...
有没有办法做到在服务器端你的时区偏移,通过 读通过HTTP请求的东西,而不是发送 一切客户端和让它处理它?
这是我想出了一个解决方案,当我与WCF Web服务的同一个问题:
How to get a WCF Web Service to return DateTimes in user's local timezone
基本上,我得到我的JavaScript /角码,以确定用户的时区,然后将此值传递给我的其中一个WCF Web服务。
请注意,我有一个名为getListOfRecords
的Web服务,它带有一个参数,即时区偏移值。
$scope.loadSomeDatabaseRecords = function() {
var d = new Date()
var timezoneOffset = d.getTimezoneOffset();
return $http({
url: 'http://localhost:15021/Service1.svc/getListOfRecords/' + timezoneOffset,
method: 'GET',
async: true,
cache: false,
headers: { 'Accept': 'application/json', 'Pragma': 'no-cache' }
}).success(function (data) {
$scope.listScheduleLog = data.Results;
});
}
从那里,我的C#代码读取数据库中的记录,应用于区偏移量为UTC DateTime
值,并将其返回给客户端。
- 1. 请求目录时可以确定实际的索引页吗?
- 2. 我可以根据其他变量动态创建变量吗?
- 3. 我可以根据迭代定义一个变量名吗?
- 4. 你可以改变WSO2根重定向吗?
- 5. 我可以根据请求语言加载小枝模板吗?
- 6. 可以查询请求的数据吗?
- 7. 您可以存储先前请求中的Ajax变量值吗?
- 8. 你可以在C++的类中有变量的变量吗?
- 9. 您可以根据请求URL指定要包含的JSP页面吗?
- 10. 根据时区确定电话号码?
- 11. 你可以在Coldfusion中一次性定义多个变量吗?
- 12. 你可以使用变量来指定字段宽度吗?
- 13. 你可以分配给父函数中定义的变量吗?
- 14. 你可以在Salt Pillar中定义一个变量吗?
- 15. 可以使用CURL请求在请求时设置cookie吗?
- 16. 在JMeter中,您可以指定变量来填写HTTP请求默认值吗?
- 17. 根据请求
- 18. 如何根据UTC偏移量确定时区?
- 19. 你可以从Javascript发出HTTP PATCH请求吗?
- 20. 你可以在Angular中获取获取请求的内容吗?
- 21. jquery:你可以在$(window).unload()中做一个ajax请求吗?
- 22. 你可以用NUnit在webforms中嘲弄请求吗?
- 23. 你可以向HTTP服务器发出HTTPS请求吗?
- 24. 你可以修改Safari扩展中的http请求标头吗?
- 25. 你可以从mongo发出http请求吗?
- 26. 你可以在HTTP请求中执行长操作吗?
- 27. 根据域,我可以在node.js中设置环境变量吗?
- 28. JavaScript/jQuery可以根据变量自动更改元素吗?
- 29. AngularJS:我可以根据变量禁用表单控件吗?
- 30. $请求变量未定义
谢谢你创造了我今天听到的最长版本。 – DevelopingChris 2008-12-03 20:01:48
我曾经想知道,为什么我在挪威奥斯陆获得本地化广告时,每次我用手机上的Opera Mini浏览网络时,我都意识到这是由IP导致的地理位置转换引起的......这恰好是奥斯陆是几个时区远离我住的地方:-) – Kaniu 2008-12-03 20:11:16
ChanChan:您可以随时指望我; – BenAlabaster 2008-12-04 04:01:48