【问题标题】:Reset timezone aware timestamp momentjs重置时区感知时间戳momentjs
【发布时间】:2019-01-02 19:46:46
【问题描述】:

我正在使用 momentjs 进行日期操作,并且想要编写一个场景,如果给出了时间戳,并且给出了时区名称,那么我想将时间重置为午夜。例如

let timestamp = 1493638245234;
expect(new Date(timestamp).toISOString()).toBe('2017-05-01T11:30:45.234Z'); // Time in UTC
let truncatedTimestamp = functionName(timestamp, 'America/Los_Angeles');
console.log(truncatedTimestamp); 
expect(new Date(truncatedTimestamp)).toBe('2017-05-01T04:00:00.000Z'); 


const functionName = (timestamp, timezone) => {
return moment
    .tz(timestamp, timezone)
    .startOf('day')
    .toDate()
    .getTime();
};

我希望函数 'functionName' 返回 America/Los_Angeles 时间的午夜,而不是 UTC。

我输入的时间戳是 2017 年 5 月 5 日上午 11:30 UTC。 我希望该函数返回我 2017 年 5 月 5 日 00:00 America/Los_Angeles 的时间戳(自 2017 年 5 月 5 日上午 11:30 UTC 将是上午 11:30 -7 小时 America/Los_Angeles。)并将其转换为毫秒。

【问题讨论】:

    标签: javascript ecmascript-6 momentjs moment-timezone


    【解决方案1】:

    您必须删除toDate(),它使用本地时间提供 JavaScript 日期对象。然后你可以使用valueOf() 而不是getTime()

    moment#valueOf 仅输出自 Unix 纪元以来的毫秒数,就像 Date#valueOf 一样。

    您的代码可能如下所示:

    const functionName = (timestamp, timezone) => {
      return moment(timestamp)
          .tz(timezone)
          .startOf('day')
          .valueOf();
    };
    
    let timestamp = 1493638245234;
    let truncatedTimestamp = functionName(timestamp, 'America/Los_Angeles');
    console.log(truncatedTimestamp); 
    <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/moment-timezone/0.5.17/moment-timezone-with-data-2012-2022.min.js"></script>

    请注意,moment.tztz() 在您的情况下是等效的(因为您传递的是毫秒)。

    【讨论】:

      【解决方案2】:

      我将我的函数 functionName 修改为这样并且它起作用了。

      const functionName = (timestamp, timezone) =>
          moment
              .tz(timestamp, timezone)
              .startOf('day')
              .valueOf();
      

      注意:一些用户发布了这个答案,但他们删除了他们的答案。

      【讨论】:

      • 我已取消删除我的答案,抱歉暂时删除。发布答案后,我对代码有些怀疑,但我在移动设备上检查它的机会有限(我的时区深夜也没有帮助:D)。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-05-21
      • 2013-08-13
      • 1970-01-01
      • 2015-01-08
      • 2020-07-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多