And*_*ips 0 javascript datetime momentjs
我知道这似乎是一个直截了当的问题 - 但尽管 Moment.js 和时刻时区是获取/设置和格式化日期的非常强大的工具..
我在将我的应用程序捕捉到单个时区时遇到问题。
我想要的是让用户从日期/时间选择器中进行选择 - 并将其作为 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();
Run Code Online (Sandbox Code Playgroud)
所有 3 个变量将等于同一台机器上的 SAME UTC 时间戳,但在不同时区运行的另一台机器上的时间戳不同。
想想看……如果我的日期/时间是星期六下午 3 点……那在伦敦的 UTC 与在柏林的 UTC 不同,因为它会在柏林提前一小时发生。
如何强制将日期/时间视为特定时区?
谢谢 :-)
假设 dateTime 是一个 ISO8601 字符串,并且您希望日期始终位于欧洲/伦敦时区,您只需要:
moment.tz(dateTime, 'Europe/London').unix()
Run Code Online (Sandbox Code Playgroud)
这告诉 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"
Run Code Online (Sandbox Code Playgroud)
请记住,由于夏令时,伦敦有多个偏移量。我想这就是你想要的。
如果您希望它始终保持 +0 的固定偏移量,那么您可以使用 UTC:
moment.utc(dateTime)
Run Code Online (Sandbox Code Playgroud)