【问题标题】:Get current timestamp from a specific timezone in javascript从javascript中的特定时区获取当前时间戳
【发布时间】:2019-06-14 18:25:32
【问题描述】:

我正在尝试从与本地时间无关的特定时区获取时间戳。

我希望来自世界各地的客户看到完全相同的时间戳。这甚至可能吗?我不想要 node.js 中的解决方案,但如果有一个工作库,请包含它。

【问题讨论】:

  • 使用moment.js库momentjs.commomentjs.com/timezone
  • 我已经试过了,我想我用错了代码。你确定它不仅仅适用于 node.js 吗?
  • UTC 时间之类的? w3schools.com/jsref/jsref_utc.asp
  • 它是一个 javascript 库,我已经在许多应用程序中使用过它,例如在 angularjs 前端应用程序中
  • 好的,谢谢。你有可以工作的示例代码吗?

标签: javascript jquery timestamp unix-timestamp


【解决方案1】:

您说您想获得“特定时区”的时间戳。如果您知道该特定时区的时区偏移量,那么您应该能够获得 UTC 日期,从中减去时区偏移量并输出在所有客户端上都应该相同的日期字符串。该语句应该有效:

var timeZoneOffset = 300; // Eastern Standard Time
var sameDate = (new Date(((new Date()) - (timeZoneOffset * 60 * 1000)))).toISOString()

new Date() 应该在所有客户端上返回相同的时间,以毫秒为单位,如果本地机器的日期和时间是准确的。时区偏移量以分钟为单位,因此您需要将它们乘以 60 * 1000(60 秒/分钟乘以 1000 毫秒/秒),然后从 UTC 日期减去那么多毫秒以使其等于时区中的当前时间有那个偏移量。然后将其转换为 ISO 字符串。如果需要,您可以操作生成的字符串。也许最终摆脱 Z。

var dateWithoutZ = sameDate.slice(0,-1);

【讨论】:

    【解决方案2】:

    您可以通过 JavaScript、使用 Date 对象或使用专用库(例如 moment.js)生成独立于时区的时间戳:

    const timestampMilliseconds = (new Date()).getTime();
    console.log(timestampMilliseconds);
    
    const timestampSeconds = Math.round((new Date()).getTime() / 1000);
    console.log(timestampSeconds);
    
    const timestampSecondsMoment = moment().unix();
    console.log(timestampSecondsMoment)
    <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.23.0/moment.min.js"></script>

    【讨论】:

    • 我在瑞典的 PC 和法国的 VPS 上得到不同的 moment().unix() 结果。
    • 如果你使用moment.utc().unix()而不是moment().unix()有什么不同吗?我还将验证两台主机上的操作系统日期和时间配置是否正确。
    • 不,没有什么不同。两个主机上的日期和时间都是正确的。难道不能只选择一个特定的时区并在两台主机上获得相同的时间戳吗?
    • 可以使用moment-timezone 在特定时区创建一个日期,但是,我怀疑它是否会有所帮助,因为 unix 时间戳与时区无关(因此将不同时区中的两个日期转换为 unix 时间戳应该产生相同的结果)。
    猜你喜欢
    • 2012-03-23
    • 2016-08-23
    • 1970-01-01
    • 2015-06-18
    • 2017-09-18
    • 2021-12-04
    • 2012-03-04
    • 2016-12-11
    • 1970-01-01
    相关资源
    最近更新 更多