ph-utils 0.0.13 → 0.1.4
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.
- package/lib/date.d.ts +15 -0
- package/lib/date.js +32 -2
- package/lib/date_m.d.ts +15 -0
- package/lib/date_m.js +30 -1
- package/lib/dom.d.ts +33 -2
- package/lib/dom.js +85 -3
- package/lib/index.js +18 -5
- package/lib/web.d.ts +1 -2
- package/lib/web.js +1 -2
- package/package.json +2 -2
package/lib/date.d.ts
CHANGED
@@ -17,3 +17,18 @@ export declare function parse(date?: Date | string | number): Date;
|
|
17
17
|
* @param {Boolean} isEnd true则为 endOf
|
18
18
|
*/
|
19
19
|
export declare function startOf(date?: Date | string | number, unit?: string, isEnd?: boolean): Date;
|
20
|
+
/**
|
21
|
+
* 日期加上指定时间后的日期
|
22
|
+
* @param date 指定的日期
|
23
|
+
* @param num 需要添加的数字, 如果这个参数传递一个小于0的数字,则就是日期减去相应的数字
|
24
|
+
* @param unit 需要添加的单位,date - 加减天数
|
25
|
+
*/
|
26
|
+
export declare function add(date: Date | string | number | null, num: number, unit: string): Date;
|
27
|
+
/**
|
28
|
+
* 日期加上指定时间后的日期
|
29
|
+
* @param date 指定的日期, 传递为 null ,则表示为当前日期
|
30
|
+
* @param num 需要添加的数字, 如果这个参数传递一个小于0的数字,则就是日期减去相应的数字
|
31
|
+
* @param unit 需要添加的单位,date - 加减天数
|
32
|
+
* @param fmt 如果传递了格式化的单位,则返回格式化后的日期, 格式化字符串 yyyy - 年, mm - 月, dd - 日, HH - 小时, MM - 分钟, ss - 秒
|
33
|
+
*/
|
34
|
+
export declare function add(date: Date | string | number | null, num: number, unit: string, fmt: string): string;
|
package/lib/date.js
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
"use strict";
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.startOf = exports.parse = exports.format = void 0;
|
3
|
+
exports.add = exports.startOf = exports.parse = exports.format = void 0;
|
4
4
|
/**
|
5
5
|
* node 和 web 端日期处理工具类
|
6
6
|
*/
|
@@ -21,6 +21,9 @@ function p(s, l = 2) {
|
|
21
21
|
*/
|
22
22
|
return ('000' + s).slice(l * -1);
|
23
23
|
}
|
24
|
+
function getUnit(unit) {
|
25
|
+
return unit.substring(0, 1).toUpperCase() + unit.substring(1);
|
26
|
+
}
|
24
27
|
/**
|
25
28
|
* 将日期格式化为指定形式的字符串
|
26
29
|
* @param date 日期
|
@@ -88,9 +91,36 @@ function startOf(date, unit, isEnd = false) {
|
|
88
91
|
const argumentStart = [0, 0, 0, 0];
|
89
92
|
const argumentEnd = [23, 59, 59, 999];
|
90
93
|
date = parse(date);
|
91
|
-
let
|
94
|
+
let u = getUnit(unit || 'Hours');
|
95
|
+
let fn = 'set' + u;
|
92
96
|
let args = isEnd === true ? argumentEnd : argumentStart;
|
93
97
|
Date.prototype[fn].apply(date, args);
|
94
98
|
return date;
|
95
99
|
}
|
96
100
|
exports.startOf = startOf;
|
101
|
+
/**
|
102
|
+
* 日期加上指定时间后的日期
|
103
|
+
* @param date {Date | number | string | null} 指定的日期
|
104
|
+
* @param num {number} 需要添加的数字, 如果这个参数传递一个小于0的数字,则就是日期减去相应的数字
|
105
|
+
* @param unit {string} 需要添加的单位,date - 加减天数
|
106
|
+
* @param fmt {string} 可选参数,如果传递了格式化的单位,则返回格式化后的日期, 格式化字符串 yyyy - 年, mm - 月, dd - 日, HH - 小时, MM - 分钟, ss - 秒
|
107
|
+
* @returns {Date | string} 如果传递了 fmt 参数,则返回 string,否则返回 Date
|
108
|
+
*/
|
109
|
+
function add(date, num, unit, fmt) {
|
110
|
+
let sdate = new Date();
|
111
|
+
if (date != null) {
|
112
|
+
sdate = parse(date);
|
113
|
+
}
|
114
|
+
unit = getUnit(unit);
|
115
|
+
let fn = 'set' + unit;
|
116
|
+
let gn = 'get' + unit;
|
117
|
+
let oldValue = Date.prototype[gn].apply(sdate);
|
118
|
+
Date.prototype[fn].apply(sdate, [oldValue + num]);
|
119
|
+
if (typeof fmt === 'string') {
|
120
|
+
return format(sdate, fmt);
|
121
|
+
}
|
122
|
+
else {
|
123
|
+
return sdate;
|
124
|
+
}
|
125
|
+
}
|
126
|
+
exports.add = add;
|
package/lib/date_m.d.ts
CHANGED
@@ -17,3 +17,18 @@ export declare function parse(date?: Date | string | number): Date;
|
|
17
17
|
* @param {Boolean} isEnd true则为 endOf
|
18
18
|
*/
|
19
19
|
export declare function startOf(date?: Date | string | number, unit?: string, isEnd?: boolean): Date;
|
20
|
+
/**
|
21
|
+
* 日期加上指定时间后的日期
|
22
|
+
* @param date 指定的日期
|
23
|
+
* @param num 需要添加的数字, 如果这个参数传递一个小于0的数字,则就是日期减去相应的数字
|
24
|
+
* @param unit 需要添加的单位,date - 加减天数
|
25
|
+
*/
|
26
|
+
export declare function add(date: Date | string | number | null, num: number, unit: string): Date;
|
27
|
+
/**
|
28
|
+
* 日期加上指定时间后的日期
|
29
|
+
* @param date 指定的日期, 传递为 null ,则表示为当前日期
|
30
|
+
* @param num 需要添加的数字, 如果这个参数传递一个小于0的数字,则就是日期减去相应的数字
|
31
|
+
* @param unit 需要添加的单位,date - 加减天数
|
32
|
+
* @param fmt 如果传递了格式化的单位,则返回格式化后的日期, 格式化字符串 yyyy - 年, mm - 月, dd - 日, HH - 小时, MM - 分钟, ss - 秒
|
33
|
+
*/
|
34
|
+
export declare function add(date: Date | string | number | null, num: number, unit: string, fmt: string): string;
|
package/lib/date_m.js
CHANGED
@@ -18,6 +18,9 @@ function p(s, l = 2) {
|
|
18
18
|
*/
|
19
19
|
return ('000' + s).slice(l * -1);
|
20
20
|
}
|
21
|
+
function getUnit(unit) {
|
22
|
+
return unit.substring(0, 1).toUpperCase() + unit.substring(1);
|
23
|
+
}
|
21
24
|
/**
|
22
25
|
* 将日期格式化为指定形式的字符串
|
23
26
|
* @param date 日期
|
@@ -83,8 +86,34 @@ export function startOf(date, unit, isEnd = false) {
|
|
83
86
|
const argumentStart = [0, 0, 0, 0];
|
84
87
|
const argumentEnd = [23, 59, 59, 999];
|
85
88
|
date = parse(date);
|
86
|
-
let
|
89
|
+
let u = getUnit(unit || 'Hours');
|
90
|
+
let fn = 'set' + u;
|
87
91
|
let args = isEnd === true ? argumentEnd : argumentStart;
|
88
92
|
Date.prototype[fn].apply(date, args);
|
89
93
|
return date;
|
90
94
|
}
|
95
|
+
/**
|
96
|
+
* 日期加上指定时间后的日期
|
97
|
+
* @param date 指定的日期
|
98
|
+
* @param num 需要添加的数字, 如果这个参数传递一个小于0的数字,则就是日期减去相应的数字
|
99
|
+
* @param unit 需要添加的单位,date - 加减天数
|
100
|
+
* @param fmt 可选参数,如果传递了格式化的单位,则返回格式化后的日期, 格式化字符串 yyyy - 年, mm - 月, dd - 日, HH - 小时, MM - 分钟, ss - 秒
|
101
|
+
* @returns {Date | string} 如果传递了 fmt 参数,则返回 string,否则返回 Date
|
102
|
+
*/
|
103
|
+
export function add(date, num, unit, fmt) {
|
104
|
+
let sdate = new Date();
|
105
|
+
if (date != null) {
|
106
|
+
sdate = parse(date);
|
107
|
+
}
|
108
|
+
unit = getUnit(unit);
|
109
|
+
let fn = 'set' + unit;
|
110
|
+
let gn = 'get' + unit;
|
111
|
+
let oldValue = Date.prototype[gn].apply(sdate);
|
112
|
+
Date.prototype[fn].apply(sdate, [oldValue + num]);
|
113
|
+
if (typeof fmt === 'string') {
|
114
|
+
return format(sdate, fmt);
|
115
|
+
}
|
116
|
+
else {
|
117
|
+
return sdate;
|
118
|
+
}
|
119
|
+
}
|
package/lib/dom.d.ts
CHANGED
@@ -32,6 +32,37 @@ export declare function transform(element: HTMLElement, value: string): void;
|
|
32
32
|
* @param {HTMLElement} element 添加事件的节点
|
33
33
|
* @param {string} listener 事件名称
|
34
34
|
* @param {function} event 事件处理函数
|
35
|
-
* @param {boolean}
|
35
|
+
* @param {boolean} onceOrConfig 是否是只运行一次的处理函数或者配置,其中 eventFlag 为 string,如果配置该项,则表明为委托事件
|
36
36
|
*/
|
37
|
-
export declare function on(element: HTMLElement, listener: string,
|
37
|
+
export declare function on(element: HTMLElement, listener: string, fn: (e: Event, target?: HTMLElement, flag?: string) => void, once?: boolean | {
|
38
|
+
once?: boolean;
|
39
|
+
eventFlag?: string;
|
40
|
+
}): void;
|
41
|
+
/**
|
42
|
+
* 设置或获取节点的 innerHTML 属性
|
43
|
+
* @param element
|
44
|
+
* @param htmlstr 可选,如果传递该参数,则表示设置;否则表示获取
|
45
|
+
* @returns
|
46
|
+
*/
|
47
|
+
export declare function html(element: HTMLElement, htmlstr?: string): string;
|
48
|
+
/**
|
49
|
+
* 设置或获取节点的 textContent 属性
|
50
|
+
* @param element
|
51
|
+
* @param textstr 可选,如果传递该参数,则表示设置;否则表示获取
|
52
|
+
* @returns
|
53
|
+
*/
|
54
|
+
export declare function text(element: HTMLElement, textstr?: string): string;
|
55
|
+
/**
|
56
|
+
* 节点列表遍历
|
57
|
+
* @param elems
|
58
|
+
* @param fn 遍历到节点时的回调,回调第一个参数为遍历到的节点,第2个参数为 index;如果回调函数返回 true,则会终止遍历(break)
|
59
|
+
*/
|
60
|
+
export declare function iterate(elems: NodeList, fn: (el: HTMLElement, index: number) => any): void;
|
61
|
+
/**
|
62
|
+
* 设置或获取节点 data-* 属性
|
63
|
+
* @param elem
|
64
|
+
* @param key data- 后面跟随的值
|
65
|
+
* @param value 如果传递该值表示获取;否则表示设置
|
66
|
+
* @returns
|
67
|
+
*/
|
68
|
+
export declare function attr(elem: HTMLElement, key: string, value?: string): string;
|
package/lib/dom.js
CHANGED
@@ -54,8 +54,90 @@ export function transform(element, value) {
|
|
54
54
|
* @param {HTMLElement} element 添加事件的节点
|
55
55
|
* @param {string} listener 事件名称
|
56
56
|
* @param {function} event 事件处理函数
|
57
|
-
* @param {boolean}
|
57
|
+
* @param {boolean} onceOrConfig 是否是只运行一次的处理函数或者配置,其中 eventFlag 为 string,如果配置该项,则表明为委托事件
|
58
58
|
*/
|
59
|
-
export function on(element, listener,
|
60
|
-
|
59
|
+
export function on(element, listener, fn, once = false) {
|
60
|
+
let eventExtra = {};
|
61
|
+
if (typeof once === 'boolean') {
|
62
|
+
eventExtra.once = true;
|
63
|
+
}
|
64
|
+
else {
|
65
|
+
eventExtra = once;
|
66
|
+
}
|
67
|
+
if (eventExtra.eventFlag !== null) {
|
68
|
+
element.addEventListener(listener, (e) => {
|
69
|
+
let target = e.target;
|
70
|
+
let flag = '';
|
71
|
+
do {
|
72
|
+
flag = target.getAttribute(eventExtra.eventFlag) || '';
|
73
|
+
if (flag === '') {
|
74
|
+
target = target.parentNode;
|
75
|
+
}
|
76
|
+
} while (flag === '');
|
77
|
+
if (flag !== '__stop__') {
|
78
|
+
fn(e, target, flag);
|
79
|
+
}
|
80
|
+
}, eventExtra);
|
81
|
+
}
|
82
|
+
else {
|
83
|
+
element.addEventListener(listener, fn, eventExtra);
|
84
|
+
}
|
85
|
+
}
|
86
|
+
/**
|
87
|
+
* 设置或获取节点的 innerHTML 属性
|
88
|
+
* @param element
|
89
|
+
* @param htmlstr 可选,如果传递该参数,则表示设置;否则表示获取
|
90
|
+
* @returns
|
91
|
+
*/
|
92
|
+
export function html(element, htmlstr) {
|
93
|
+
if (htmlstr == null) {
|
94
|
+
return element.innerHTML;
|
95
|
+
}
|
96
|
+
else {
|
97
|
+
element.innerHTML = htmlstr;
|
98
|
+
return undefined;
|
99
|
+
}
|
100
|
+
}
|
101
|
+
/**
|
102
|
+
* 设置或获取节点的 textContent 属性
|
103
|
+
* @param element
|
104
|
+
* @param textstr 可选,如果传递该参数,则表示设置;否则表示获取
|
105
|
+
* @returns
|
106
|
+
*/
|
107
|
+
export function text(element, textstr) {
|
108
|
+
if (textstr == null) {
|
109
|
+
return element.textContent;
|
110
|
+
}
|
111
|
+
else {
|
112
|
+
element.textContent = textstr;
|
113
|
+
return undefined;
|
114
|
+
}
|
115
|
+
}
|
116
|
+
/**
|
117
|
+
* 节点列表遍历
|
118
|
+
* @param elems
|
119
|
+
* @param fn 遍历到节点时的回调,回调第一个参数为遍历到的节点,第2个参数为 index;如果回调函数返回 true,则会终止遍历(break)
|
120
|
+
*/
|
121
|
+
export function iterate(elems, fn) {
|
122
|
+
for (let i = 0, len = elems.length; i < len; i++) {
|
123
|
+
let r = fn(elems[i], i);
|
124
|
+
if (r === true) {
|
125
|
+
break;
|
126
|
+
}
|
127
|
+
}
|
128
|
+
}
|
129
|
+
/**
|
130
|
+
* 设置或获取节点 data-* 属性
|
131
|
+
* @param elem
|
132
|
+
* @param key data- 后面跟随的值
|
133
|
+
* @param value 如果传递该值表示获取;否则表示设置
|
134
|
+
* @returns
|
135
|
+
*/
|
136
|
+
export function attr(elem, key, value) {
|
137
|
+
if (value != null) {
|
138
|
+
elem.setAttribute('data-' + key, value);
|
139
|
+
}
|
140
|
+
else {
|
141
|
+
return elem.getAttribute('data-' + key);
|
142
|
+
}
|
61
143
|
}
|
package/lib/index.js
CHANGED
@@ -1,23 +1,27 @@
|
|
1
|
+
"use strict";
|
1
2
|
/**
|
2
3
|
* node 和 web 通用的工具类
|
3
4
|
*/
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
+
exports.BaseError = exports.isBoolean = exports.isNumeric = exports.shieldMobile = exports.isBlank = void 0;
|
4
7
|
/**
|
5
8
|
* 验证字符串是否为空
|
6
9
|
* @param str 待验证的字符串
|
7
10
|
* @param ignoreWhitespace 是否忽略空格(包括空白字符串以及[\r\t\n]之类的制表符),默认为true
|
8
11
|
*/
|
9
|
-
|
12
|
+
function isBlank(str, ignoreWhitespace = true) {
|
10
13
|
if (str == null) {
|
11
14
|
return true;
|
12
15
|
}
|
13
16
|
return (ignoreWhitespace ? str.trim().length : str.length) === 0;
|
14
17
|
}
|
18
|
+
exports.isBlank = isBlank;
|
15
19
|
/**
|
16
20
|
* 屏蔽手机号,中间部分用 * 展示
|
17
21
|
* @param mobile 待屏蔽的手机号
|
18
22
|
* @returns 屏蔽后的手机号,例如:123 **** 1234
|
19
23
|
*/
|
20
|
-
|
24
|
+
function shieldMobile(mobile) {
|
21
25
|
let x1 = Math.round(mobile.length / 2);
|
22
26
|
let x2 = Math.round(x1 / 2);
|
23
27
|
let shields = [' '];
|
@@ -27,6 +31,7 @@ export function shieldMobile(mobile) {
|
|
27
31
|
shields.push(' ');
|
28
32
|
return mobile.substring(0, x2) + shields.join('') + mobile.substring(x2 + x1);
|
29
33
|
}
|
34
|
+
exports.shieldMobile = shieldMobile;
|
30
35
|
/**
|
31
36
|
* 验证参数是否是数字
|
32
37
|
* @param str 待验证的字符串
|
@@ -35,24 +40,31 @@ export function shieldMobile(mobile) {
|
|
35
40
|
* @param numericParam.isFloat 是否是小数
|
36
41
|
* @returns true 是数字, false 不是数字
|
37
42
|
*/
|
38
|
-
|
43
|
+
function isNumeric(str, numericParam) {
|
39
44
|
numericParam = { isPositive: false, isFloat: true, ...(numericParam || {}) };
|
40
45
|
let symbol = numericParam.isPositive ? '[+]?' : '[+-]?';
|
41
46
|
let main = numericParam.isFloat ? '([0-9]*[.])?[0-9]+' : '[0-9]+';
|
42
47
|
return new RegExp('^' + symbol + main + '$').test(str);
|
43
48
|
}
|
49
|
+
exports.isNumeric = isNumeric;
|
44
50
|
/**
|
45
51
|
* 验证参数是否是Boolean 类型
|
46
52
|
* @param str 待验证的字符串
|
47
53
|
* @returns
|
48
54
|
*/
|
49
|
-
|
55
|
+
function isBoolean(str) {
|
50
56
|
return ['true', 'false'].indexOf(str) >= 0;
|
51
57
|
}
|
58
|
+
exports.isBoolean = isBoolean;
|
52
59
|
/**
|
53
60
|
* 带有错误名称标记的错误类型
|
54
61
|
*/
|
55
|
-
|
62
|
+
class BaseError extends Error {
|
63
|
+
/**
|
64
|
+
* 错误名称,类似于 Java 中的不同的 Exception[NullPointerException];
|
65
|
+
* 增加 name 字段,表明不同的错误,当需要根据不同的错误执行不同的处理的时候,会很有用
|
66
|
+
*/
|
67
|
+
name;
|
56
68
|
constructor() {
|
57
69
|
if (arguments.length === 1) {
|
58
70
|
super(arguments[0]);
|
@@ -64,3 +76,4 @@ export class BaseError extends Error {
|
|
64
76
|
}
|
65
77
|
}
|
66
78
|
}
|
79
|
+
exports.BaseError = BaseError;
|
package/lib/web.d.ts
CHANGED
@@ -8,11 +8,10 @@ interface QueryRes {
|
|
8
8
|
}
|
9
9
|
/**
|
10
10
|
* 获取 url query 参数 (get 请求的参数)
|
11
|
-
* @param key 获取指定 key 的参数,可选,如果不传该参数,则返回解析到的所有的参数列表
|
12
11
|
* @param search 如果是 React 应用就需要传递 useLocation().search
|
13
12
|
* @returns
|
14
13
|
*/
|
15
|
-
export declare function query(
|
14
|
+
export declare function query(search?: string): QueryRes;
|
16
15
|
interface RandomOpts {
|
17
16
|
/** 生成的随机数是整形还是小数形 */
|
18
17
|
isInt?: boolean;
|
package/lib/web.js
CHANGED
@@ -30,11 +30,10 @@ export const formJson = function (form) {
|
|
30
30
|
};
|
31
31
|
/**
|
32
32
|
* 获取 url query 参数 (get 请求的参数)
|
33
|
-
* @param key 获取指定 key 的参数,可选,如果不传该参数,则返回解析到的所有的参数列表
|
34
33
|
* @param search 如果是 React 应用就需要传递 useLocation().search
|
35
34
|
* @returns
|
36
35
|
*/
|
37
|
-
export function query(
|
36
|
+
export function query(search) {
|
38
37
|
if (isBlank(search)) {
|
39
38
|
search = location.search;
|
40
39
|
}
|
package/package.json
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
"module": "lib/index_m.js",
|
6
6
|
"types": "lib/index.d.ts",
|
7
7
|
"browser": "lib/index_m.js",
|
8
|
-
"version": "0.
|
8
|
+
"version": "0.1.4",
|
9
9
|
"repository": {
|
10
10
|
"type": "git",
|
11
11
|
"url": "git+https//gitee.com/towardly/ph.git",
|
@@ -19,7 +19,7 @@
|
|
19
19
|
"homepage": "https://gitee.com/towardly/ph/tree/master/packages/utils",
|
20
20
|
"devDependencies": {
|
21
21
|
"@types/node": "^15.0.3",
|
22
|
-
"typescript": "^4.
|
22
|
+
"typescript": "^4.4.4"
|
23
23
|
},
|
24
24
|
"scripts": {
|
25
25
|
"build": "node scripts/build.js"
|