javascript - 使用 momentjs 在最终用户的时区进行操作

标签 javascript timezone timestamp momentjs timestamp-with-timezone

我处于 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/

相关文章:

javascript - 使用 javascript/prototype/script.acuo.us 在另一个 div 之前插入一个 div

java - java中特定日期时间的时区转换

java - 我如何将 log4j 时间格式化为特定时区?

python - 在 Python 中将分层 pandas DatetimeIndex 保存到 hdf5 时丢失时区感知

java - 在 Java 中读取更新时的 SQL 时间戳

javascript - 如何查看偏移左值?

javascript - Parasails.js 和使用(Vue Router 或 virtualPages)

javascript - 自动刷新 JavaScript 代码

c# - 在本地时区格式化 UTC 时间戳

java - 如何在java中为每一行添加时间戳?