javascript - Moment.js 时区 - 输出时考虑处于不同时区的日期/时间

标签 javascript datetime momentjs

我知道这似乎是一个直接的问题 - 但尽管 Moment.js 和 moment timezone 是获取/设置和格式化日期的非常强大的工具..

我在将应用程序捕捉到单个时区时遇到问题。

我想要的是让用户从日期/时间选择器中进行选择 - 并将其作为 UTC 中的 unix 时间戳发送..但日期/时间选择器必须被视为 BST。

换句话说,即使您在国外使用该网站,您选择的日期/时间也应该是 UTC 值(如果您是在英国选择的)。

var local = moment(dateTime).unix();
var london = moment(dateTime).tz('Europe/London').unix();
var berlin = moment(dateTime).tz('Europe/Berlin').unix();

所有 3 个变量在同一台计算机上都等于相同的 UTC 时间戳,但在不同时区运行的另一台计算机上则等于不同的时间戳。

想一想......如果我的日期/时间是周六下午 3 点......伦敦的 UTC 与柏林的 UTC 不同,因为柏林的 UTC 时间会早一小时。

如何强制将日期/时间视为特定时区?

谢谢:-)

最佳答案

假设 dateTime 是一个 ISO8601 字符串,并且您希望日期始终位于欧洲/伦敦时区,您所需要的只是:

moment.tz(dateTime, 'Europe/London').unix()

这告诉 moment 将该时间解释为伦敦时间,前提是它没有指定的偏移量。如果有偏移,则会从偏移时间转换为伦敦时间。

所以,对于我在美国/芝加哥来说,你可以看到这样的效果:

//unix timestap in london time
moment.tz('2016-12-30', 'Europe/London').unix()
1483056000
//parse that timestamp back to my local time
moment.unix(1483056000).format()
"2016-12-29T18:00:00-06:00"

请记住,由于夏令时,伦敦有多个偏移。我想这就是你想要的。

如果您希望它始终保持固定偏移量 +0,那么您可以使用 UTC:

moment.utc(dateTime)

关于javascript - Moment.js 时区 - 输出时考虑处于不同时区的日期/时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36748992/

相关文章:

javascript - Moment js - 显示距离日期的天数和小时数

javascript - 使用 Javascript(节点)的股票图表模式查找器

javascript - 回发后禁用的单选按钮失去值(value)

javascript - HTML 5 - 使用 Canvas 的绘图应用程序未绘图

javascript - IE中类型文件的输入

javascript - 将日期时间转换为 ISO 格式

ruby-on-rails - 如何在 REST XML Web 服务中表示可变偏移时区?

c# - 为什么 Datetime.DayOfWeek 是错误的?

c# - asp.net中如何更改日期字符串的格式

javascript - 如何将日期字符串转换为带时区的日期?