【问题标题】:How to convert a UTC time to local time javascript如何将UTC时间转换为本地时间javascript
【发布时间】:2014-10-18 06:22:04
【问题描述】:

我需要根据用户时区转换 UTC 时间本地时间

我有两个参数 utc time 和 users timezone 作为字符串

即 0,1,2,3 ...12(时区) 0,-1,-2,-3 ...-12(时区)

var utc = "2014-10-18T06:14:41.512Z"
tz = 5.5(Indian Standard Time)

预期结果2014 年 10 月 18 日星期六 11:44:28 GMT+0530

我试过时刻js

moment("2014-10-18T06:14:41.512Z").zone('+05:30').format('YYYY-MM-DD HH:mm')

结果是正确的。

但是当我将时区更改为其他时区时,它没有按预期显示 试过了

moment("2014-10-18T06:14:41.512Z").zone('+12:00').format('YYYY-MM-DD HH:mm')

结果“2014-10-18 18:14”预计2014-10-18 19:18

12 是新西兰时区。请帮我解决这个问题。谢谢

【问题讨论】:

    标签: javascript momentjs


    【解决方案1】:

    检查一下

    var date = new Date('2014-10-19 17:00:34 UTC');
    date.toString();
    
    
    var timezone = "America/New_York";
    var utcDate = "2014-10-19T10:31:59.0537721Z";
    
    var localDate = moment.utc(utcDate).tz(timezone).format()
    

    还要检查

    http://www.digitoffee.com/programming/get-local-time-utc-using-moment-js/94/

    【讨论】:

    • 谢谢,但我在服务器端执行此操作。我手上有用户时区,有什么方法可以在服务器端使用 moment.js 进行转换
    • 谢谢,但我不知道区域,即“America/New_York”。对于 +05:30,我只有 5.5 之类的区域号
    • 您可以使用 UTC+05:30 作为时区
    • 能否将EST等UTC时区转换为IANA格式America/New_York
    【解决方案2】:

    要遵守国际标准,您需要格式化您的 UTC 日期以包含 time delimiter Tzone designator Z

    Zzero UTC 偏移量又名 Zulu 时间的时区指示符。 您可以阅读有关International Date Standard ISO8601 格式细节here 的更多信息。

    一旦您符合国际标准,跨浏览器友好的方法就很简单了:

    new Date('2014-10-19T17:00:34Z');
    // Sun Oct 19 2014 12:00:34 GMT-0500 (Central Daylight Time)
    

    【讨论】:

      【解决方案3】:

      时区不是偏移量。偏移量只是时区的部分。许多时区在两个不同的偏移量之间交替,以解释daylight saving time。时区必须考虑到这一点,包括夏令时开始和结束的具体日期和时间,以及时区可能发生的任何更改历史记录。

      您提供的新西兰案例就是一个很好的例子。您说“12 是新西兰时区”,因此预计自 New Zealand is in DST for that date 以来,从 6:14 UTC 到新西兰当地时间的转换将是 19:14。 - 13 小时后。

      但 12 并不完全代表新西兰。它与 UTC 仅相差 12 小时。还有许多其他时区以不同的方式使用相同的偏移量。例如,马绍尔群岛全年使用 UTC+12,没有夏令时。

      您真的应该阅读the timezone tag wiki - 尤其是标题为“时区!=偏移”的部分。

      您应该使用来自tz database 的完整 IANA 标识符来表示时区,而不是偏移量。例如美国东部时间是"America/New_York",印度时间是"Asia/Kolkata",新西兰时间是"Pacific/Auckland"。您可以在the list on Wikipedia 中找到更多信息。

      您可以使用 moment-timezone 在 JavaScript 中使用这些。

      moment("2014-10-18T06:14:41.512Z").tz('Pacific/Auckland').format('YYYY-MM-DD HH:mm')
      
      //  Output: "2014-10-18 19:14"
      

      我还在 Pluralsight.com 上的 Date and Time Fundamentals 课程中详细介绍了这些主题。

      【讨论】:

      • 所有优点。时区不仅仅是偏移量。布里斯班和悉尼在同一经度,但悉尼有夏令时,布里斯班没有。所以我们全年保持 +10,它们在 +10 和 +11 之间波动。
      【解决方案4】:

      请检查此链接

      http://www.digitoffee.com/programming/get-local-time-utc-using-moment-js/94/

      var timezone = "UTC+5.30"; 
      var utcDate = "2014-10-19T10:31:59.0537721Z";
      
      var localDate = moment.utc(utcDate).tz(timezone).format()
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-02-08
        • 1970-01-01
        • 1970-01-01
        • 2012-11-17
        • 2018-07-27
        • 2013-08-13
        • 2014-07-18
        相关资源
        最近更新 更多