Get the Beginning and Ending in a Unit of Time via Momentjs

Overview

根据 moment.js 得到一个单位时间或者时间段(如本周,上周,本月,上月,当前季度,上个季度)的开始结束时间

主要利用以下几项 API:

  • format(): 得到格式化的时间
  • startOf(): 得到一个单位时间的开始时间点, 文档
  • endOf(): 得到一个单位时间的结束时间点
  • add(): 在指定时间点的基础上,加上一个时间段
  • subtract(): 在指定时间点的基础上,减去一个时间段
  • week(): 获取或设置一个时间对象的周数(第几周)
  • month(): 获取或设置一个时间对象的月份
  • quarter(): 获取或设置一个时间对象的季度

 1// 获取当天开始结束时间
 2function getCurrDays () {
 3  let date = moment()
 4  let start = date.startOf('days').format('YYYY-MM-DD HH:mm:ss')
 5  let end   = date.endOf('days').format('YYYY-MM-DD HH:mm:ss')
 6  return [ start, end ]
 7}
 8
 9// 获取昨天的开始结束时间
10function getYesterday () {
11  let date = moment().subtract('days',1);
12  let start = date.startOf('days').format('YYYY-MM-DD HH:mm:ss')
13  let end   = date.endOf('days').format('YYYY-MM-DD HH:mm:ss')
14  return [ start, end ]
15}
16
17// 获取明天的开始结束时间
18function getTomorrow () {
19  let date = moment().add('days',1);
20  let start = date.startOf('days').format('YYYY-MM-DD HH:mm:ss')
21  let end   = date.endOf('days').format('YYYY-MM-DD HH:mm:ss')
22  return [ start, end ]
23}

获取某一周(本周,上周,下周)的开始结束时间,一周从周日开始到周六结束。

 1// 本周
 2function getCurrWeekDays () {
 3  let date = moment()
 4  let start = date.startOf('week').format('YYYY-MM-DD HH:mm:ss')
 5  let end   = date.endOf('week').format('YYYY-MM-DD HH:mm:ss')
 6  return [ start, end ]
 7}
 8// 上一周
 9function getLastWeekDays () {
10  let date = moment().week(moment().week() - 1)
11  let start = date.startOf('week').format('YYYY-MM-DD HH:mm:ss')
12  let end   = date.endOf('week').format('YYYY-MM-DD HH:mm:ss')
13  return [ start, end ]
14}
15// 下一周
16function getNextWeekDays () {
17  let date = moment().week(moment().week() + 1)
18  let start = date.startOf('week').format('YYYY-MM-DD HH:mm:ss')
19  let end   = date.endOf('week').format('YYYY-MM-DD HH:mm:ss')
20  return [ start, end ]
21}

 1// 本月
 2function getCurrMonthDays () {
 3  let date = moment()
 4  let start = date.startOf('month').format('YYYY-MM-DD')
 5  let end   = date.endOf('month').format('YYYY-MM-DD')
 6  return [ start, end ];
 7}
 8// 上个月
 9function getLastMonthDays () {
10  let date = moment().month(moment().month() - 1)
11  let start = date.startOf('month').format('YYYY-MM-DD')
12  let end   = date.endOf('month').format('YYYY-MM-DD')
13  return [ start, end ];
14}
15// 下个月
16function getNextMonthDays () {
17  let date = moment().month(moment().month() + 1)
18  let start = date.startOf('month').format('YYYY-MM-DD')
19  let end   = date.endOf('month').format('YYYY-MM-DD')
20  return [ start, end ];
21}

季度

 1// 当前季度
 2function getCurrQuarter () {
 3  let date = moment()
 4  let start = date.startOf('quarter').format('YYYY-MM-DD')
 5  let end   = date.endOf('quarter').format('YYYY-MM-DD')
 6  return [ start, end ];
 7}
 8// 上个季度
 9function getLastQuarter () {
10  let date = moment().quarter(moment().quarter() - 1)
11  let start = date.startOf('quarter').format('YYYY-MM-DD')
12  let end   = date.endOf('quarter').format('YYYY-MM-DD')
13  return [ start, end ];
14}
15// 下个季度
16function getLastQuarter () {
17  let date = moment().quarter(moment().quarter() + 1)
18
19}

DRY -

Don't repeat yourself.

上面代码中可以看到有一个固定结构重复了好多次:

1function getX () {
2  let date = x
3  let start = date.startOf('时间单位类型').format('格式化')
4  let end   = date.endOf('时间单位类型').format('格式化')
5  return [ start, end ];
6}

所以我们可以专门封装一个函数,接收三个参数(时间,时间单位,格式化),返回开始和结束时间。

1function getDuringTime (date, type, format) {
2  let start = date.startOf(type).format(format)
3  let end   = date.endOf(type).format(format)
4  return [ start, end ];
5}

有了此工具函数,将上面代码汇总如下:

 1/**
 2 * @param {date} date [momentjs 时间对象]
 3 * @param {String} type [单位时间类型]
 4 * @param {String} format [时间格式]
 5 * type 可以接收的值: year, month, quarter, week, isoWeek, day, date, hour, minute, second
 6 */
 7function getDuringTime (date=moment(), type='days', format='YYYY-MM-DD HH:mm:ss') {
 8  let start = date.startOf(type).format(format)
 9  let end   = date.endOf(type).format(format)
10  return [ start, end ];
11}
12
13// 获取当天开始结束时间
14function getCurrDays () {
15  let date = moment()
16  return getDuringTime(date, 'days', 'YYYY-MM-DD')
17}
18
19// 获取昨天的开始结束时间
20function getYesterday () {
21  let date = moment().subtract('days',1)
22  return getDuringTime(date, 'days', 'YYYY-MM-DD')
23}
24
25// 获取明天的开始结束时间
26function getTomorrow () {
27  let date = moment().add('days',1)
28  return getDuringTime(date, 'days', 'YYYY-MM-DD')
29}
30
31// 获取某一周(本周,上周,下周)的开始结束时间,一周从周日开始到周六结束。
32// 本周
33function getCurrWeekDays () {
34  let date = moment()
35  return getDuringTime(date, 'week', 'YYYY-MM-DD')
36}
37// 上一周
38function getLastWeekDays () {
39  let date = moment().week(moment().week() - 1)
40  return getDuringTime(date, 'week', 'YYYY-MM-DD')
41}
42// 下一周
43function getNextWeekDays () {
44  let date = moment().week(moment().week() + 1)
45  return getDuringTime(date, 'week', 'YYYY-MM-DD')
46}
47
48// 本月
49function getCurrMonthDays () {
50  let date = moment()
51  return getDuringTime(date, 'month', 'YYYY-MM-DD')
52}
53// 上个月
54function getLastMonthDays () {
55  let date = moment().month(moment().month() - 1)
56  return getDuringTime(date, 'month', 'YYYY-MM-DD')
57}
58// 下个月
59function getNextMonthDays () {
60  let date = moment().month(moment().month() + 1)
61  return getDuringTime(date, 'month', 'YYYY-MM-DD')
62}
63
64// 当前季度
65function getCurrQuarter () {
66  let date = moment()
67  return getDuringTime(date, 'quarter', 'YYYY-MM-DD')
68}
69// 上个季度
70function getLastQuarter () {
71  let date = moment().quarter(moment().quarter() - 1)
72  return getDuringTime(date, 'quarter', 'YYYY-MM-DD')
73}
74// 下个季度
75function getLastQuarter () {
76  let date = moment().quarter(moment().quarter() + 1)
77  return getDuringTime(date, 'quarter', 'YYYY-MM-DD')
78}

本文完,感谢阅读。:stuck_out_tongue_winking_eye: