乐趣区

关于javascript:关于moment的自定义时间快捷选项及值的回填

应用场景 :工夫默认值可选用 指定默认值 或 工夫快捷选项。指定默认值是用户选定的某个固定工夫,工夫快捷选项是绝对于关上利用的工夫,并非固定工夫,如选中了昨天,在 8 月 20 日关上利用时,工夫回显 8 月 19 日,在 9 月 30 日关上利用时,工夫回显 9 月 29 日。且这两种默认值的可用状态是互斥的,只可二选一。
此处只列举格局为 YYYYMMDD(年月日)的状况


单个工夫点的配置场景

抉择固定默认值

抉择快捷选项

工夫区间的配置场景

固定默认值

抉择快捷选项


回显实现形式:

// isRange 是否是工夫区间
// timeSize 工夫粒度(精确度) Y- 年 M- 月 w- 周 D- 日
// previousNumber 工夫区间 近 * 天(周 / 月 / 年)
// hasThisYear 工夫区间 是否蕴含当天(本周 / 本月 / 本年)
let defaultValue    // 要回填的最终值
let date1   // 工夫区间 蕴含当天(本周 / 本月 / 本年)
let date2   // 工夫区间 不蕴含当天(本周 / 本月 / 本年)

if (!isRange) {switch (timeSize) {
    case 'Y':
      defaultValue = moment().year(moment().year() - 1).startOf('year') // 去年
      break
    case 'M':
      defaultValue = moment().month(moment().month() - 1).startOf('month') // 上月
      break
    case 'w':
      defaultValue = moment().week(moment().week() - 1).startOf('week') // 上周
      break
    case 'D':
      defaultValue = moment().subtract(1, 'days') // 昨天
      break
    default:
      defaultValue = moment().subtract(1, 'days')
      break
  }
} else {switch (timeSize) {
    case 'Y':
      date1 = [moment().year(moment().year() - previousNumber + 1).startOf('year'), moment().endOf('year')]
      date2 = [moment().year(moment().year() - previousNumber).startOf('year'), moment().year(moment().year() - 1).endOf('year')]
      break
    case 'M':
      date1 = [moment().month(moment().month() - previousNumber + 1).startOf('month'), moment().endOf('month')]
      date2 = [moment().month(moment().month() - previousNumber).startOf('month'), moment().month(moment().month() - 1).endOf('month')]
      break
    case 'w':
      date1 = [moment().week(moment().week() - previousNumber + 1).startOf('week'), moment().endOf('week')]
      date2 = [moment().week(moment().week() - previousNumber).startOf('week'), moment().week(moment().week() - 1).endOf('week')] 
      break
    case 'D':
      date1 = [moment().subtract(previousNumber - 1, 'days'), moment()]
      date2 = [moment().subtract(previousNumber, 'days'), moment().subtract(1, 'days')]
      break
    default:
      date1 = [moment().subtract(previousNumber - 1, 'days'), moment()]
      date2 = [moment().subtract(previousNumber, 'days'), moment().subtract(1, 'days')]
      break
  }
  // 蕴含当天,取 date1;不蕴含当天,取 date2
  defaultValue = hasThisYear ? date1 : date2
}

之后回填 defaultValue 到工夫组件中便可

退出移动版