【问题标题】:nodejs convert timestamp string into date with custom timezone and to UTCnodejs将时间戳字符串转换为具有自定义时区的日期和UTC
【发布时间】:2014-03-11 13:38:12
【问题描述】:

假设我将值 '2014-03-03 16:20:20' 作为输入,我想将其转换 到时区是实时的(即节点位于 Europe ,但时间戳是在 America 收集的),之后我想获得真实值的 UTC 表示。

知道哪些软件包可以提供帮助吗?尝试了 moment.js 没有运气..

【问题讨论】:

  • 您的要求是从客户端获取时间并信任它而不是使用服务器时间?
  • 要求以'YYYY-MM-DD hh:mm:ss'格式获取用户的日期,根据用户的时区将其转换为UTC日期
  • 您是否在网络浏览器中收集输入?为什么不在那里转换为 UTC,这样您就不必涉及时区了?为什么必须在 node.js 服务器端代码中完成?
  • 因为它不是浏览器,它是硬件上的遗留代码,无法修改并且始终设置为特定且固定的 TZ。

标签: javascript node.js timezone


【解决方案1】:

终于用momentjs-timezone找到了答案,

这有点有趣,因为您不会在主站点 http://momentjs.com/timezone/ 上获得有关活动的提示,但您可以在 http://github.com/moment/moment-timezone 上找到它

无论如何,这就是你的做法:

var tz0 = moment.tz("2014-03-03 16:20:20", "Asia/Jerusalem")
var tz1 = moment.utc(tz0);


console.log(tz0.format('YYYY-MM-DD hh:mm:ss'));
console.log(tz1.format('YYYY-MM-DD hh:mm:ss'));

你可以分别看到输出

2014-03-03 04:20:20
2014-03-03 02:20:20

【讨论】:

    【解决方案2】:
    // moment.js
    
    var utc = moment('2014-03-03 16:20:20','YYYY-MM-DD HH:mm:ss', 'us');
    // or timezone string pass from client
    
    var eu = utc.zone("+02:00");
    var eu = utc.zone("-02:00");
    

    【讨论】:

    • 如果我不知道区域时差(“+02:00”)怎么办?如果我想传递“我们”时间并转换为本地时间,然后转换为 UTC,该怎么办?
    • 你检查一下,预加载一个带有时间差异的表。选择您在运行时需要的那个。欧盟时区不是很多
    【解决方案3】:

    momentjs 可以帮助你。像下面这样:

    1. 您能否使用 ISO 日期和时区信息格式化输入,例如 2014-03-03T16:20:20-05:00(假设您从 GMT-5 时区的当地时间获取)
    2. 然后调用:moment.parseZone('2014-03-03T16:20:20-05:00').zone(1).format()(假设你想获取当地时间GMT+1 时区)

    希望有所帮助, 罗恩

    【讨论】:

      【解决方案4】:

      Timezone 是一个优雅的模块。

      var tz = require("timezone/loaded");
      var formattedDate = tz(unformattedTimestamp, '%d %B %Y, %-I:%M %p', "Europe/Amsterdam");
      

      您可以使用bootstraphelper 捕获用户的时区。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-11-13
        • 2017-05-27
        • 2019-03-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-09-21
        • 2015-10-24
        相关资源
        最近更新 更多