我处于 EDT,而我的最终用户处于 PDT。我希望我的 Web 应用程序能够像在最终用户的时区中运行一样运行(例如,即使他们旅行,也会显示回家的时间)。来自 Java 服务器的时间戳被格式化为包含最终用户的时区,例如“Mon Oct 27 06:57:00 PDT 2014”,我还有最终用户 TZ 字符串,例如配置文件中的“美国/温哥华”。我正在使用 native Date() 并且它为用户显示正确的时间,但我无法使用它来将时间与客户端中的时间进行比较。我正在寻求更改为 moment.js,但我不知道如何让它执行我想要的操作。基本上,考虑到上面的时间戳,我希望能够调用 m.hour() 并返回 6。我还希望能够获取最终用户时间中的某一天(“现在”和时间戳),并查看最后一个时间戳距离当前时间有多远(以分钟为单位)。这是我失败的尝试:
var d = "Mon Oct 27 06:57:00 PDT 2014";
var ds = d.split(/ /).slice(1).join(' '); // eat "Mon "
var m = moment.tz(ds, "MMM D HH:mm:ss Z YYYY", "America/Vancouver");
alert("" + m.hour()); // 23 ??? Want "6"!
var n = moment.tz("America/Vancouver");
var df = n.diff(m, 'minute');
alert(m.format() + "\n" + n.format() +
"\n" + df + " minutes ago");
fiddle :http://jsfiddle.net/up628qbq/
谢谢!
最佳答案
在格式字符串中使用小写的 z
而不是大写的 Z
。这将匹配时区时区缩写字符。
请注意,这实际上不会将缩写解释为特定的偏移量。这主要是因为缩写可能会产生歧义。 (There are 5 different meanings of "CST")。因此, DST fall-back transition 期间的一些值可能会被错误地解释。
例如,在太平洋时区,2014 年 11 月 2 日有两个凌晨 1:00 的实例。第一个是 PDT (-7),第二个是 PST (-8)。即使您提供了缩写,但暂时不会使用它来消除歧义。如果您想确定正在使用哪个实例,则需要包含一个数字时区偏移量并使用 Z
进行解析。
此外,您可以使用 ddd
作为工作日名称,而不是拆分和切片。
关于javascript - 使用 momentjs 在最终用户的时区进行操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26590914/