我想知道用户所在的当地时区。例如知道洛杉矶落后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)。 似乎那个时刻的物体无法以这种方式进行比较,因为上面的陈述似乎总是正确的......
答案 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。