我在EDT,我的最终用户在PDT。我希望我的WebApp可以像在最终用户的时区中运行一样运行(例如,即使他们旅行它以显示回家的时间)。来自Java服务器的时间戳被格式化为包括最终用户的时区,例如“星期一10月27日06:57:00 PDT 2014”,我也有最终用户TZ字符串,例如配置文件中的“America / Vancouver”。我正在使用本机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");
小提琴:http://jsfiddle.net/up628qbq/
谢谢!
答案 0 :(得分:1)
在格式字符串中使用小写z
而不是大写Z
。这将匹配时区缩写字符。
请注意,这实际上并未将缩写解释为特定偏移量。这主要是因为缩写可能不明确。 (There are 5 different meanings of "CST")。因此,DST fall-back transition期间的某些值可能会被错误地解释。
例如,在太平洋时区,有两个实例,即2014年11月2日凌晨1点。第一个是PDT(-7),第二个是PST(-8)。即使您提供了缩写,但赢了时使用它来消除歧义。如果您想确定使用的是哪个实例,则需要使用Z
来包含和解析数字时区偏移量。
此外,您可以使用ddd
作为工作日名称,而不是分割和切片。
答案 1 :(得分:0)
谢谢马特!我没有足够的声誉来投票"所以我做了你推荐的更改(删除split
并添加ddd
格式,更改Z
小提琴中的z
} http://jsfiddle.net/up628qbq/1/