

const padMonth = m => m > 9 ? m : `0${m}`

/**
 * 补齐 ISO 的时间
 * @param {*} dt 
 * @param {*} isStart 
 * @returns 
 */
export function fillTime(dt, isStart) {
  const tm = isStart ? '00:00:00.000' : '23:59:59.999'
  return `${dt}T${tm}Z`
} 

/**
 * 日期减去天数, 并返回结果的凌晨
 * @param {*} dt 
 * @param {*} days 
 * @returns 
 */
export function cutDays(dt, days) {
  const zone8 = 8 * 3600 * 100 // 中国时区, 因为 toJSON 是 ISO 时间
  const ret = new Date(new Date(dt).valueOf() - (days - 1) * 24 * 3600 * 1000 + zone8)
  return new Date(ret.toJSON().substring(0, 10))
}

/**
 * 日期减去月数, 并返回结果月的第一天的凌晨
 * @param {*} dt 
 * @param {*} months 
 * @returns 
 */
export function cutMonths(dt, months) {
  const origin = new Date(dt)
  const mon = origin.getMonth() + 1
  const startMonth = mon - months
  if (startMonth <= 0) {
    const startYear = origin.getFullYear() - 1
    return new Date(`${startYear}-${padMonth(startMonth + 12)}-01`)
  } else {
    return new Date(`${origin.getFullYear()}-${padMonth(startMonth)}-01`)
  }
}

/**
 * 获取持续的月份, 或者天数
 * @param {*} dt 
 * @param {*} num 
 * @param {*} type 
 * @returns 
 */
export function getList(dt, num, type) {
  const arr = new Array(num).fill();
  if (type === 'day') {
    const increment = 24 * 3600 * 1000
    const zone8 = 8 * 3600 * 100 // 中国时区, 因为 toJSON 是 ISO 时间
    return arr.map((_, inx) => {
      const nw = new Date(dt.valueOf() + inx * increment + zone8)
      return nw.toJSON().substring(0, 10)
    })
  } else {
    const year = dt.getFullYear()
    const month = dt.getMonth() + 1

    return arr.map((_, inx) => {
      let y = year
      let nw = month + inx
      if (nw > 12) {
        nw -= 12
        y += 1
      }

      return `${y}-${padMonth(nw)}`
    })
  }
}
