【问题标题】:How to create dates in another timezone, in browser Javascript如何在浏览器 Javascript 中创建另一个时区的日期
【发布时间】:2015-05-10 03:12:33
【问题描述】:

我有一个客户端 Web 应用程序,用户必须在其中为他们自己的时区以外的时区创建日期,但我不确定执行此操作的最佳方法。

使用 Moment 时区,我知道如何将时间更改到另一个时区。即,将Nov 18 2013 11:00:00 GMT-0500 转换为Nov 19 2013 03:00:00 GMT+1100。这些仍然代表相同的绝对时间,只是具有不同的“视图”。

我需要做的是转换,尊重夏令时,Nov 18 2013 11:00:00 America/Toronto"Nov 18 2013 11:00:00 Australia/Sydney(这是不同的绝对时间)。

到目前为止,我能想到的唯一方法是创建一个Date,将其序列化为字符串,然后使用 Moment Timezone 解析它,类似于:

localEvent = new Date(2015, 03, 10, 18, 30)
eventStr = localEvent.toString().split('GMT')[0]
# eventStr = 'Fri Apr 10 2015 18:30:00'
event = moment.tz(eventStr, 'Australia/Sydney')

所以现在无论浏览器在哪个时区运行,这段代码都会创建完全相同的时间点。

但这感觉很hacky,有没有更好的方法来做到这一点?

【问题讨论】:

  • 你知道时差是多少你需要查一下吗?
  • @WillReese 我需要查一下,因为小时差可能会改变。由于夏令时,在保存小时差和创建日期时间之间的时间,偏移量可能已经改变。

标签: javascript date timezone momentjs


【解决方案1】:

是的,你可以做得更好:

var zone = moment().tz('Australia/Sydney');

var c = moment(new Date(2015, 03, 10, 18, 30));
c.utcOffset(zone.utcOffset(), true);
                             // ^--- this flag keeps the same time
                             //      while shifts a timezone

console.log(c.format());

JSFiddle:http://jsfiddle.net/8m6rdzqj/

我是如何找到它的:我刚刚浏览了 moment 和 moment-timezone 来源:https://github.com/moment/moment-timezone/blob/master/moment-timezone.js#L347

【讨论】:

    猜你喜欢
    • 2015-02-10
    • 2014-01-17
    • 2014-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-22
    相关资源
    最近更新 更多