有没有一种简单的方法可以确定用户在哪个半球?

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

【讨论】:

以上是关于有没有一种简单的方法可以确定用户在哪个半球?的主要内容,如果未能解决你的问题,请参考以下文章

确定哪个依赖数组变量导致 useEffect 钩子触发

确定哪个 CGPath 被点击

有没有一种简单的方法可以在 django 中获取用户的组名

有没有一种简单的方法可以从 CakePHP 的视图中获取 AuthComponent 用户数据?

有没有一种简单的方法可以让烧瓶中的会话超时?

有没有一种简单的方法可以从 .NET 用户控件中删除“ct100”前缀?