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: