hsu-utils 0.0.48 → 0.0.50

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
1
  /*!
2
2
  *
3
- * hsu-utils v0.0.47
3
+ * hsu-utils v0.0.49
4
4
  *
5
5
  * some front-end utils
6
6
  *
@@ -0,0 +1,13 @@
1
+ import { Dayjs } from 'dayjs';
2
+ export type DateRangeType = 'past' | 'future' | 'today' | 'thisWeek' | 'thisMonth' | 'thisQuarter' | 'thisYear';
3
+ export interface GetDateRangeOptions {
4
+ amount?: number;
5
+ type: DateRangeType;
6
+ baseDate?: string | Date | Dayjs;
7
+ unit?: 'day' | 'week' | 'month' | 'year';
8
+ minDate?: string | Date | Dayjs;
9
+ maxDate?: string | Date | Dayjs;
10
+ hasTime?: boolean;
11
+ }
12
+ export type DateRangeResult = [string, string];
13
+ export default function getDateRange(options: GetDateRangeOptions): DateRangeResult;
@@ -0,0 +1,112 @@
1
+ import dayjs from 'dayjs';
2
+ import quarterOfYear from 'dayjs/plugin/quarterOfYear';
3
+ import weekOfYear from 'dayjs/plugin/weekOfYear';
4
+ dayjs.extend(quarterOfYear);
5
+ dayjs.extend(weekOfYear);
6
+ function getFormat(type, unit = 'day', hasTime = true) {
7
+ let baseFormat;
8
+ switch (type) {
9
+ case 'today':
10
+ baseFormat = 'YYYY-MM-DD';
11
+ break;
12
+ case 'thisWeek':
13
+ baseFormat = 'YYYY-MM-DD';
14
+ break;
15
+ case 'thisMonth':
16
+ baseFormat = 'YYYY-MM';
17
+ break;
18
+ case 'thisQuarter':
19
+ baseFormat = 'YYYY-[Q]Q';
20
+ break;
21
+ case 'thisYear':
22
+ baseFormat = 'YYYY';
23
+ break;
24
+ case 'past':
25
+ case 'future':
26
+ default:
27
+ switch (unit) {
28
+ case 'year':
29
+ baseFormat = 'YYYY';
30
+ break;
31
+ case 'month':
32
+ baseFormat = 'YYYY-MM';
33
+ break;
34
+ case 'week':
35
+ case 'day':
36
+ default:
37
+ baseFormat = 'YYYY-MM-DD';
38
+ break;
39
+ }
40
+ break;
41
+ }
42
+ if (hasTime && (baseFormat.includes('DD') || baseFormat === 'YYYY-MM-DD')) {
43
+ return `${baseFormat} HH:mm:ss`;
44
+ }
45
+ return baseFormat;
46
+ }
47
+ export default function getDateRange(options) {
48
+ const { type, amount = 0, baseDate, unit = 'day', minDate: minDateLimit, maxDate: maxDateLimit, hasTime = true } = options;
49
+ const base = baseDate ? dayjs(baseDate) : dayjs();
50
+ let minDate;
51
+ let maxDate;
52
+ switch (type) {
53
+ case 'past':
54
+ maxDate = base.endOf(unit);
55
+ minDate = base.subtract(amount, unit).startOf(unit);
56
+ if (minDateLimit) {
57
+ const minLimit = dayjs(minDateLimit).startOf(unit);
58
+ if (minLimit.isAfter(minDate)) {
59
+ minDate = minLimit;
60
+ }
61
+ }
62
+ if (maxDateLimit) {
63
+ const maxLimit = dayjs(maxDateLimit).endOf(unit);
64
+ if (maxLimit.isBefore(maxDate)) {
65
+ maxDate = maxLimit;
66
+ }
67
+ }
68
+ break;
69
+ case 'future':
70
+ minDate = base.startOf(unit);
71
+ maxDate = base.add(amount, unit).endOf(unit);
72
+ if (minDateLimit) {
73
+ const minLimit = dayjs(minDateLimit).startOf(unit);
74
+ if (minLimit.isAfter(minDate)) {
75
+ minDate = minLimit;
76
+ }
77
+ }
78
+ if (maxDateLimit) {
79
+ const maxLimit = dayjs(maxDateLimit).endOf(unit);
80
+ if (maxLimit.isBefore(maxDate)) {
81
+ maxDate = maxLimit;
82
+ }
83
+ }
84
+ break;
85
+ case 'today':
86
+ minDate = base.startOf('day');
87
+ maxDate = base.endOf('day');
88
+ break;
89
+ case 'thisWeek':
90
+ minDate = base.startOf('week');
91
+ maxDate = base.endOf('week');
92
+ break;
93
+ case 'thisMonth':
94
+ minDate = base.startOf('month');
95
+ maxDate = base.endOf('month');
96
+ break;
97
+ case 'thisQuarter':
98
+ minDate = base.startOf('quarter');
99
+ maxDate = base.endOf('quarter');
100
+ break;
101
+ case 'thisYear':
102
+ minDate = base.startOf('year');
103
+ maxDate = base.endOf('year');
104
+ break;
105
+ default:
106
+ throw new Error(`不支持的类型: ${type}`);
107
+ }
108
+ const format = getFormat(type, unit, hasTime);
109
+ const min = minDate.format(format);
110
+ const max = maxDate.format(format);
111
+ return [min, max];
112
+ }
package/es/index.d.ts CHANGED
@@ -11,6 +11,9 @@ import array_is_includes from './ArrayIsIncludes';
11
11
  import generateRandomStr from './GenerateRandomStr';
12
12
  import getTimeDifference from './GetTimeDifference';
13
13
  import loadFont from './LoadFont';
14
- export { console_table, deepCopy, Equal, Typeof, get_string_size, get_string_size_async, loadFont, ConvertNumbers, loadImage, RenderPDF, downloadFile, array_is_includes, generateRandomStr, getTimeDifference };
14
+ import getDateRange from './GetDateRange';
15
+ export { console_table, deepCopy, Equal, Typeof, get_string_size, get_string_size_async, loadFont, ConvertNumbers, loadImage, RenderPDF, downloadFile, array_is_includes, generateRandomStr, getTimeDifference, getDateRange };
15
16
  import { ConsoleData } from './ConsoleTable';
16
17
  export type { ConsoleData };
18
+ import type { DateRangeType, GetDateRangeOptions, DateRangeResult } from './GetDateRange';
19
+ export type { DateRangeType, GetDateRangeOptions, DateRangeResult };
package/es/index.js CHANGED
@@ -11,4 +11,5 @@ import array_is_includes from './ArrayIsIncludes';
11
11
  import generateRandomStr from './GenerateRandomStr';
12
12
  import getTimeDifference from './GetTimeDifference';
13
13
  import loadFont from './LoadFont';
14
- export { console_table, deepCopy, Equal, Typeof, get_string_size, get_string_size_async, loadFont, ConvertNumbers, loadImage, RenderPDF, downloadFile, array_is_includes, generateRandomStr, getTimeDifference };
14
+ import getDateRange from './GetDateRange';
15
+ export { console_table, deepCopy, Equal, Typeof, get_string_size, get_string_size_async, loadFont, ConvertNumbers, loadImage, RenderPDF, downloadFile, array_is_includes, generateRandomStr, getTimeDifference, getDateRange };
@@ -0,0 +1,13 @@
1
+ import { Dayjs } from 'dayjs';
2
+ export type DateRangeType = 'past' | 'future' | 'today' | 'thisWeek' | 'thisMonth' | 'thisQuarter' | 'thisYear';
3
+ export interface GetDateRangeOptions {
4
+ amount?: number;
5
+ type: DateRangeType;
6
+ baseDate?: string | Date | Dayjs;
7
+ unit?: 'day' | 'week' | 'month' | 'year';
8
+ minDate?: string | Date | Dayjs;
9
+ maxDate?: string | Date | Dayjs;
10
+ hasTime?: boolean;
11
+ }
12
+ export type DateRangeResult = [string, string];
13
+ export default function getDateRange(options: GetDateRangeOptions): DateRangeResult;
@@ -0,0 +1,120 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ var dayjs_1 = __importDefault(require("dayjs"));
7
+ var quarterOfYear_1 = __importDefault(require("dayjs/plugin/quarterOfYear"));
8
+ var weekOfYear_1 = __importDefault(require("dayjs/plugin/weekOfYear"));
9
+ dayjs_1.default.extend(quarterOfYear_1.default);
10
+ dayjs_1.default.extend(weekOfYear_1.default);
11
+ function getFormat(type, unit, hasTime) {
12
+ if (unit === void 0) { unit = 'day'; }
13
+ if (hasTime === void 0) { hasTime = true; }
14
+ var baseFormat;
15
+ switch (type) {
16
+ case 'today':
17
+ baseFormat = 'YYYY-MM-DD';
18
+ break;
19
+ case 'thisWeek':
20
+ baseFormat = 'YYYY-MM-DD';
21
+ break;
22
+ case 'thisMonth':
23
+ baseFormat = 'YYYY-MM';
24
+ break;
25
+ case 'thisQuarter':
26
+ baseFormat = 'YYYY-[Q]Q';
27
+ break;
28
+ case 'thisYear':
29
+ baseFormat = 'YYYY';
30
+ break;
31
+ case 'past':
32
+ case 'future':
33
+ default:
34
+ switch (unit) {
35
+ case 'year':
36
+ baseFormat = 'YYYY';
37
+ break;
38
+ case 'month':
39
+ baseFormat = 'YYYY-MM';
40
+ break;
41
+ case 'week':
42
+ case 'day':
43
+ default:
44
+ baseFormat = 'YYYY-MM-DD';
45
+ break;
46
+ }
47
+ break;
48
+ }
49
+ if (hasTime && (baseFormat.includes('DD') || baseFormat === 'YYYY-MM-DD')) {
50
+ return "".concat(baseFormat, " HH:mm:ss");
51
+ }
52
+ return baseFormat;
53
+ }
54
+ function getDateRange(options) {
55
+ var type = options.type, _a = options.amount, amount = _a === void 0 ? 0 : _a, baseDate = options.baseDate, _b = options.unit, unit = _b === void 0 ? 'day' : _b, minDateLimit = options.minDate, maxDateLimit = options.maxDate, _c = options.hasTime, hasTime = _c === void 0 ? true : _c;
56
+ var base = baseDate ? (0, dayjs_1.default)(baseDate) : (0, dayjs_1.default)();
57
+ var minDate;
58
+ var maxDate;
59
+ switch (type) {
60
+ case 'past':
61
+ maxDate = base.endOf(unit);
62
+ minDate = base.subtract(amount, unit).startOf(unit);
63
+ if (minDateLimit) {
64
+ var minLimit = (0, dayjs_1.default)(minDateLimit).startOf(unit);
65
+ if (minLimit.isAfter(minDate)) {
66
+ minDate = minLimit;
67
+ }
68
+ }
69
+ if (maxDateLimit) {
70
+ var maxLimit = (0, dayjs_1.default)(maxDateLimit).endOf(unit);
71
+ if (maxLimit.isBefore(maxDate)) {
72
+ maxDate = maxLimit;
73
+ }
74
+ }
75
+ break;
76
+ case 'future':
77
+ minDate = base.startOf(unit);
78
+ maxDate = base.add(amount, unit).endOf(unit);
79
+ if (minDateLimit) {
80
+ var minLimit = (0, dayjs_1.default)(minDateLimit).startOf(unit);
81
+ if (minLimit.isAfter(minDate)) {
82
+ minDate = minLimit;
83
+ }
84
+ }
85
+ if (maxDateLimit) {
86
+ var maxLimit = (0, dayjs_1.default)(maxDateLimit).endOf(unit);
87
+ if (maxLimit.isBefore(maxDate)) {
88
+ maxDate = maxLimit;
89
+ }
90
+ }
91
+ break;
92
+ case 'today':
93
+ minDate = base.startOf('day');
94
+ maxDate = base.endOf('day');
95
+ break;
96
+ case 'thisWeek':
97
+ minDate = base.startOf('week');
98
+ maxDate = base.endOf('week');
99
+ break;
100
+ case 'thisMonth':
101
+ minDate = base.startOf('month');
102
+ maxDate = base.endOf('month');
103
+ break;
104
+ case 'thisQuarter':
105
+ minDate = base.startOf('quarter');
106
+ maxDate = base.endOf('quarter');
107
+ break;
108
+ case 'thisYear':
109
+ minDate = base.startOf('year');
110
+ maxDate = base.endOf('year');
111
+ break;
112
+ default:
113
+ throw new Error("\u4E0D\u652F\u6301\u7684\u7C7B\u578B: ".concat(type));
114
+ }
115
+ var format = getFormat(type, unit, hasTime);
116
+ var min = minDate.format(format);
117
+ var max = maxDate.format(format);
118
+ return [min, max];
119
+ }
120
+ exports.default = getDateRange;
package/lib/index.d.ts CHANGED
@@ -11,6 +11,9 @@ import array_is_includes from './ArrayIsIncludes';
11
11
  import generateRandomStr from './GenerateRandomStr';
12
12
  import getTimeDifference from './GetTimeDifference';
13
13
  import loadFont from './LoadFont';
14
- export { console_table, deepCopy, Equal, Typeof, get_string_size, get_string_size_async, loadFont, ConvertNumbers, loadImage, RenderPDF, downloadFile, array_is_includes, generateRandomStr, getTimeDifference };
14
+ import getDateRange from './GetDateRange';
15
+ export { console_table, deepCopy, Equal, Typeof, get_string_size, get_string_size_async, loadFont, ConvertNumbers, loadImage, RenderPDF, downloadFile, array_is_includes, generateRandomStr, getTimeDifference, getDateRange };
15
16
  import { ConsoleData } from './ConsoleTable';
16
17
  export type { ConsoleData };
18
+ import type { DateRangeType, GetDateRangeOptions, DateRangeResult } from './GetDateRange';
19
+ export type { DateRangeType, GetDateRangeOptions, DateRangeResult };
package/lib/index.js CHANGED
@@ -26,7 +26,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
26
26
  return (mod && mod.__esModule) ? mod : { "default": mod };
27
27
  };
28
28
  Object.defineProperty(exports, "__esModule", { value: true });
29
- exports.getTimeDifference = exports.generateRandomStr = exports.array_is_includes = exports.downloadFile = exports.RenderPDF = exports.loadImage = exports.ConvertNumbers = exports.loadFont = exports.get_string_size_async = exports.get_string_size = exports.Typeof = exports.Equal = exports.deepCopy = exports.console_table = void 0;
29
+ exports.getDateRange = exports.getTimeDifference = exports.generateRandomStr = exports.array_is_includes = exports.downloadFile = exports.RenderPDF = exports.loadImage = exports.ConvertNumbers = exports.loadFont = exports.get_string_size_async = exports.get_string_size = exports.Typeof = exports.Equal = exports.deepCopy = exports.console_table = void 0;
30
30
  var ConsoleTable_1 = __importDefault(require("./ConsoleTable"));
31
31
  exports.console_table = ConsoleTable_1.default;
32
32
  var DeepCopy_1 = __importDefault(require("./DeepCopy"));
@@ -54,3 +54,5 @@ var GetTimeDifference_1 = __importDefault(require("./GetTimeDifference"));
54
54
  exports.getTimeDifference = GetTimeDifference_1.default;
55
55
  var LoadFont_1 = __importDefault(require("./LoadFont"));
56
56
  exports.loadFont = LoadFont_1.default;
57
+ var GetDateRange_1 = __importDefault(require("./GetDateRange"));
58
+ exports.getDateRange = GetDateRange_1.default;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hsu-utils",
3
- "version": "0.0.48",
3
+ "version": "0.0.50",
4
4
  "description": "some front-end utils",
5
5
  "repository": "git@github.com:VitaTsui/hsu-utils.git",
6
6
  "author": "VitaHsu <vitahsu7@gmail.com>",
@@ -54,6 +54,7 @@
54
54
  "webpack-cli": "^4.9.1"
55
55
  },
56
56
  "dependencies": {
57
+ "dayjs": "^1.11.19",
57
58
  "pdfjs-dist": "2.13.216"
58
59
  }
59
60
  }