从jinja2中的浏览器获取当地时间(moments.js)

时间:2015-08-10 18:29:12

标签: timezone jinja2 momentjs

我想知道用户所在的当地时区。例如知道洛杉矶落后UTC 7小时,我可以从浏览器中获取用户的时差,以测试用户是否在本地(LA)时区吗?

我想在我的网站上发表以下声明

{%if user.timedelta_to_utc == -7%}

有没有办法获得user.timedelta_to_utc? 谢谢 卡尔

编辑:好的,这是我的尝试,但失败了。我使用了moments.js包并执行了以下操作

{%if moment(utc_time).calendar()!= moment(local_time,local = True).calendar()%}

其中utc_time是utc时间的时间戳,local_time是由local和utc之间的时差校正的相同时间戳。所以如果我在不同的时区,上面的陈述应该是真的(时刻包自动将日期转移到本地时间,除非我给它local = True)。 似乎那个时刻的物体无法以这种方式进行比较,因为上面的陈述似乎总是正确的......

1 个答案:

答案 0 :(得分:0)

  

我想知道用户所在的当地时区。例如知道洛杉矶落后UTC 7小时,我可以从浏览器中获取用户的时差,以测试用户是否在本地(LA)时区吗?

洛杉矶位于美国太平洋时区,仅在夏令时使用UTC-7,否则为UTC-8。数值不能表示整个时区。它只能表示特定时刻与UTC的偏移量。

此外,许多不同的时区共享相同的数字偏移 - 可能在一年的同一时间,或者可能在不同的时间。

所以,如果您知道用户在洛杉矶,您可以确定他们的当前时区偏移是-7或-8,但只给出-7或-8,您不能告诉用户是在洛杉矶。这是一种单向的,特定时间的关系。

  

好的,这是我的尝试,但失败了。我使用了moments.js包并执行了以下操作

{% if moment(utc_time).calendar() != moment(local_time, local=True).calendar() %}

这有点奇怪,因为calendar函数返回各种人类可读的字符串值as described here。试图比较它们的平等并没有任何意义。

此外,moment构造函数没有超载,它将local=True作为第二个参数。只使用moment(string)时,本地是默认设置。如果您想要UTC,请使用moment.utc(string)。字符串是否包含local或utc值并不重要 - 它只控制输入值的解释方式,而不是当前设置的模式。

如果您只想要特定时刻的UTC偏移量,那么就有功能。

var m = moment();
m.utcOffset() // returns offset in minutes, such as -420
m.format("Z") // returns offset as string, such as "-07:00"

关于确定用户的实际时区,例如America/Los_Angeles,您可以refer to this question