我知道这似乎是一个直接的问题 - 但尽管 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/