【问题标题】:How to use Moment.js to determine financial quarters based upon Unix timestamp?如何使用 Moment.js 根据 Unix 时间戳确定财务季度?
【发布时间】:2016-08-31 04:22:29
【问题描述】:

我的目标是比较代表财务季度的两个数据集。 API 的特殊之处在于每个获取请求需要两个日期:startDate(包括)和endDate(不包括)。因此,例如,要获取 2016 年 7 月的数据,您需要:

startDate = 20160701 和 endDate = 20160801。

给定一个unixStartDate(这是一个Unix时间戳),我想找到(1)当前季度的startDate和endDate,以及(2)startDate和endDate上一季度。

到目前为止,我可以毫无问题地使用 moment.js 确定当前季度:
const currentQuarter = moment.unix(unixStartDate).utc().quarter();
我可能会根据这些信息制作一个 hacky switch-case,但我希望有一个更优雅的解决方案。

Moment.js 还包含moment().startOf('quarter'),但我一直无法弄清楚它的正确用法。 Console.log 产生一个对象:

Moment {_isAMomentObject: true, 
_isUTC: false, 
_pf: Object, 
_locale: Locale, 
_d: Fri Jul 01 2016 00:00:00 GMT-1000 (HST)…}

【问题讨论】:

    标签: javascript momentjs unix-timestamp


    【解决方案1】:

    这是一个详细的版本:

    const moment = require('moment');
    
    let unixStartDate  = ...;
    
    let current        = moment(unixStartDate);
    let currentStartOf = moment(current).startOf('quarter');
    let currentEndOf   = moment(current).  endOf('quarter').add(1, 'day');
    
    let previous        = moment(current).subtract(1, 'quarter');
    let previousStartOf = moment(previous).startOf('quarter');
    let previousEndOf   = moment(previous).  endOf('quarter').add(1, 'day');
    
    console.log(
      'current ', 
      currentStartOf.format('YYYYMMDD'),
      currentEndOf  .format('YYYYMMDD')
    )
    
    console.log(
      'previous', 
      previousStartOf.format('YYYYMMDD'),
      previousEndOf  .format('YYYYMMDD')
    )
    

    【讨论】:

    • 感谢您的回复。我需要调整的一件事是给 moment 一个 Date 对象,而不是最初的 unixStartDate。因此:let date = new Date(unixStartDate*1000); 和 let current = moment(date);
    猜你喜欢
    • 2019-03-06
    • 2012-12-12
    • 1970-01-01
    • 1970-01-01
    • 2016-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多