在最终用户中操作's时区与momentjs
Operating in the end user's timezone with momentjs
我在EDT,我的最终用户在PDT。我希望我的WebApp能像在最终用户的时区运行一样运行(例如,即使他们旅行,也会显示回家的时间)。来自Java服务器的时间戳被格式化为包括最终用户的时区,例如"Mon Oct 27 06:57:00 PDT 2014",我在配置文件中也有最终用户的TZ字符串,例如"America/VVancouver"。我使用的是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
。这将与时区缩写字符相匹配。
请注意,这实际上不会将缩写解释为特定的偏移量。这主要是因为缩写词可能不明确。("CST"有5种不同的含义)。因此,DST回退转换期间的某些值可能会被错误解释。
例如,在太平洋时区,有两个2014年11月2日凌晨1:00的实例。第一个是PDT(-7),第二个是PST(-8)。即使您提供了缩写,moment也不会用它来消除歧义。如果您想确定正在使用哪个实例,则需要包含一个数字时区偏移量,并使用Z
进行解析。
此外,您可以使用ddd
作为工作日名称,而不是拆分和切片。
谢谢马特!我没有足够的声誉来"投票支持",所以我做了你建议的修改(删除split
并添加ddd
格式,将Z
更改为z
):http://jsfiddle.net/up628qbq/1/
- toLocaleDateString和toLocaleString方法不尊重机器时区
- 高库存时期时间与时区不匹配
- 仅在IE中,javascript中的时区名称不正确
- 带时区的Javascript Datestring转换器
- 获取用户选择的不带时区的日期
- Rails:如何获取当前用户'使用Heroku时的时区
- 时刻时区和时区(_Z)
- 使用linq.js按当前日期订购一组momentjs日期
- 分析特定区域设置(而不是时区!)中的日期字符串
- moment.js在两个时区格式的日期之间存在差异
- 获取本地时间的JS日期,日期对象中没有时区详细信息
- MomentJS代码不会开始新的一周
- momentjs-toDate()-时区被重置
- 如何使用momentjs将澳大利亚/墨尔本时区设置为倒计时计时器
- 使用MomentJs显示日期时间,而无需进行时区转换
- 在最终用户中操作's时区与momentjs
- 使用momentjs转换时区
- 时区不匹配在MeteorJS和MomentJS插入和查找
- 使用momentJS确定任意时区中指定日期的星期几
- MomentJS .format() 在我的时区中生成正确的日期 -1 天