首页 文章

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

提问于
浏览
0

我知道这似乎是一个直截了当的问题 - 但是虽然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();

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

考虑一下......如果我的日期/时间是星期六下午3点......这是伦敦的一个不同于UTC的UTC,因为它将在柏林提前一小时发生 .

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

谢谢 :-)

1 回答

  • 4

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

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

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

    那么,对于我在美国/芝加哥,你可以看到这个效果:

    //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)
    

相关问题