有没有一种简单的方法可以确定用户在哪个半球?
Posted
技术标签:
【中文标题】有没有一种简单的方法可以确定用户在哪个半球?【英文标题】:Is there an easy way to determine which hemisphere a user is in? 【发布时间】:2011-10-20 02:00:52 【问题描述】:我正在开展一个包含季节性内容的项目,我们正在考虑确定用户的位置,以确定适合他们的季节。这样做的明显方法是对他们的 IP 进行地理定位,然后获取纬度。 > 0 是北半球,
我很高兴这样做 - 虽然将 IP 精确定位到确切位置似乎有点浪费,只是为了确定它们在地球的哪一半 - 但我想我会扔掉它以防万一有人有任何可能缩短流程的技巧。
请求标头,可以在客户端用 JS 提取的东西,很容易获得 - 我只是认为它没有任何帮助。
【问题讨论】:
【参考方案1】:我会先检查客户的时钟—— 如果客户的日历中存在夏令时, 你可以判断他是在赤道以北还是以南。
如果没有dst信息,可以使用geolocation,
或者询问用户是否在赤道以南...
window.whatHemisphere= (function()
var y= new Date().getFullYear();
if(y.getTimezoneOffset()==undefined) return null;
var jan= -(new Date(y, 0, 1, 0, 0, 0, 0).getTimezoneOffset()),
jul= -(new Date(y, 6, 1, 0, 0, 0, 0).getTimezoneOffset()),
diff= jan-jul;
if(diff> 0) return 'N';
if(diff< 0) return 'S'
return null;
)()
【讨论】:
夏令时不代表半球 这是一个非常巧妙的技巧 - 我认为夏令时将指示半球,因为它告诉我们夏季发生在一年中的哪个半球......大多数目标受众将在国家一定要遵守 DST,所以这是对工具包的一个有价值的补充 - 谢谢。 谢谢 Kennebec - 我会接受你的回答,因为这是我想的那种“把戏”。 这是有问题的,因为y
只是这里的年份数字并且没有getTimezoneOffset
方法。此外,“如果存在夏令时”是一个很大的 IF,因为世界上很多地方根本不做 DST。【参考方案2】:
您可以使用navigator.geolocation 方法来避免任何类型的IP 服务。
【讨论】:
Firefox 使用使用 IP 地址的 Google 位置服务...请注意,并非所有浏览器都支持 navigation.geolocation。 我肯定会使用内置地理定位作为我的首选 - 谢谢! 感谢机器人 - 你的答案可能是“正确”的答案,但我只能接受一个。【参考方案3】:@kennebec 的回答很聪明,但代码似乎未经测试。这是有效的代码。它对不使用夏令时问题的地方没有帮助。
function whatHemisphere()
let y = new Date()
if (y.getTimezoneOffset==undefined) return null
y = y.getFullYear()
let jan = -(new Date(y, 0, 1, 0, 0, 0, 0).getTimezoneOffset())
let jul = -(new Date(y, 6, 1, 0, 0, 0, 0).getTimezoneOffset())
let diff = jan - jul
if (diff < 0) return 'N'
if (diff > 0) return 'S'
return null
【讨论】:
以上是关于有没有一种简单的方法可以确定用户在哪个半球?的主要内容,如果未能解决你的问题,请参考以下文章