All files / date getLastStart.js

100% Statements 31/31
100% Branches 12/12
100% Functions 1/1
100% Lines 31/31

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64                                  1x 1x   1x 1x     6x 6x 6x         6x 1x   5x 5x 1x 1x 1x 4x 1x 1x 1x 1x 1x 1x 1x   3x 3x 2x   3x 1x   3x 3x     5x     1x  
/**
 * 获取过去一段时间的起始日期,如3月前第1天,2周前第1天,3小时前整点
 * @method date/getLastStart
 * @param {Number|Date} time 实际时间
 * @param {String} type 单位时间类型,可选 ['year', 'month', 'week', 'day', 'hour']
 * @param {Number} count 多少单位时间之前
 * @returns {Date} 最近单位时间的起始时间对象
 * @example
 * var $getLastStart = require('@spore-ui/kit/packages/date/getLastStart');
 * var time = $getLastStart(
 *   new Date('2018-10-25'),
 *   'month',
 *   0
 * ).getTime(); // 1538323200000
 * new Date(time); // Mon Oct 01 2018 00:00:00 GMT+0800 (中国标准时间)
 */
 
var $getTimeSplit = require('./getTimeSplit');
var $getUTCDate = require('./getUTCDate');
 
var HOUR = 60 * 60 * 1000;
var DAY = 24 * 60 * 60 * 1000;
 
function getLastStart(time, type, count) {
  var localTime = new Date(time);
  var utcTime = $getUTCDate(time);
  var stamp = utcTime;
  var year;
  var month;
  var allMonths;
  var unit;
  if (!type) {
    throw new Error('required param type');
  }
  count = count || 0;
  if (type === 'year') {
    year = utcTime.getUTCFullYear();
    year -= count;
    stamp = new Date(year + '/1/1');
  } else if (type === 'month') {
    year = utcTime.getUTCFullYear();
    month = utcTime.getUTCMonth();
    allMonths = year * 12 + month - count;
    year = Math.floor(allMonths / 12);
    month = allMonths - year * 12;
    month += 1;
    stamp = new Date([year, month, 1].join('/'));
  } else {
    unit = HOUR;
    if (type === 'day') {
      unit = DAY;
    }
    if (type === 'week') {
      unit = 7 * DAY;
    }
    var newLocalTime = localTime - count * unit;
    stamp = $getTimeSplit(newLocalTime, type);
  }
 
  return stamp;
}
 
module.exports = getLastStart;