Node.js/JavaScript最近30日間の日付を取得

3146 ワード

テキストリンク:http://www.childsay.com/js-last-30-dates.html
毎月の日数は28、29、30、31の4つのケースがあるため、最近の30日間の日付には次の3つのケースがあります.
  • 開始日と終了日はいずれも現在の月で、同じ月
  • 開始日は先月、終了日は現在の月
  • です.
  • 開始日は前月、中間は2月、終了日は現在の月
  • 日付の処理にはdayjsモジュールが使用されます
    npm install --save dayjs
    

    取得日(終了日)と開始日
    //      dayjs   
    const endDayjs = dayjs();
    
    //      dayjs   ,   30  ,      ,          29  
    const startDayjs = dayjs().subtract(29, 'days');
    

    //dayjs日付の日数、月、年を取得する方法で、取得した月が実際より1小さいことに注意し、すべて1を追加する必要があります.
    dayjs().year();
    dayjs().month() + 1;
    dayjs().date();
    

    月の合計日数を取得し、最近の30日間が月をまたいでいるかどうかを計算します.
    dayjs().daysInMonth()
    

    指定範囲の配列を生成し、以下のコードは[1,2,3,.....30]を生成することを示し、末尾の数字は含まれないことに注意する.
    _.range(1, 31) 
    

    _.eachは配列をループすることを表し、forまたはArray map法に類似する.
    ポイントは、完全なコードの次のとおりです.
    const _ = require('lodash');
    const dayjs = require('dayjs');
    
    function last30dates()  {
      const endDayjs = dayjs();
      const endYear = endDayjs.year();
      const endMonth = endDayjs.month() + 1;
      const endMonthString = endMonth < 10 ? '0' + endMonth.toString() : endMonth.toString();
      const endDate = endDayjs.date();
      const startDayjs = dayjs().subtract(29, 'days');
      const startYear = startDayjs.year();
      const startMonth = startDayjs.month() + 1;
      const startMonthString = startMonth < 10 ? '0' + startMonth.toString() : startMonth.toString();
      const startDate = startDayjs.date();
      const dates = [];
      if (endMonth === startMonth) {
        //     ,      
        _.each(_.range(startDate, endDate + 1), (item) => {
          if (item < 10) {
            item = '0' + item.toString();
          }
          dates.push(`${endYear}-${endMonthString}-${item}`);
        });
      } else if (endMonth === startMonth + 1 || startMonth - endMonth === 11) {
        //         
        //    
        _.each(_.range(startDate, startDayjs.daysInMonth() + 1), (item) => {
          if (item < 10) {
            item = '0' + item.toString();
          }
          dates.push(`${startYear}-${startMonthString}-${item}`);
        });
    
        //    
        _.each(_.range(1, endDate + 1), (item) => {
          if (item < 10) {
            item = '0' + item.toString();
          }
          dates.push(`${endYear}-${endMonthString}-${item}`);
        });
      } else if (endMonth === startMonth + 2) {
        //     、       ,   2   
        //     
        _.each(_.range(startDate, startDayjs.daysInMonth() + 1), (item) => {
          if (item < 10) {
            item = '0' + item.toString();
          }
          dates.push(`${startYear}-${startMonthString}-${item}`);
        });
    
        // 2  
        _.each(_.range(1, startDayjs.add(1, 'months').daysInMonth() + 1), (item) => {
          if (item < 10) {
            item = '0' + item.toString();
          }
          dates.push(`${startYear}-02-${item}`);
        });
    
        //    
        _.each(_.range(1, endDate + 1), (item) => {
          if (item < 10) {
            item = '0' + item.toString();
          }
          dates.push(`${endYear}-${endMonthString}-${item}`);
        });
      }
    
      return dates;
    };