ph-utils 0.0.12 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
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 fn = 'set' + unit || 'Hours';
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 fn = 'set' + unit || 'Hours';
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
@@ -35,3 +35,31 @@ export declare function transform(element: HTMLElement, value: string): void;
35
35
  * @param {boolean} once 是否是只运行一次的处理函数
36
36
  */
37
37
  export declare function on(element: HTMLElement, listener: string, event: (e?: Event) => void, once?: boolean): void;
38
+ /**
39
+ * 设置或获取节点的 innerHTML 属性
40
+ * @param element
41
+ * @param htmlstr 可选,如果传递该参数,则表示设置;否则表示获取
42
+ * @returns
43
+ */
44
+ export declare function html(element: HTMLElement, htmlstr?: string): string;
45
+ /**
46
+ * 设置或获取节点的 textContent 属性
47
+ * @param element
48
+ * @param textstr 可选,如果传递该参数,则表示设置;否则表示获取
49
+ * @returns
50
+ */
51
+ export declare function text(element: HTMLElement, textstr?: string): string;
52
+ /**
53
+ * 节点列表遍历
54
+ * @param elems
55
+ * @param fn 遍历到节点时的回调,回调第一个参数为遍历到的节点,第2个参数为 index;如果回调函数返回 true,则会终止遍历(break)
56
+ */
57
+ export declare function iterate(elems: NodeList, fn: (el: HTMLElement, index: number) => any): void;
58
+ /**
59
+ * 设置或获取节点 data-* 属性
60
+ * @param elem
61
+ * @param key data- 后面跟随的值
62
+ * @param value 如果传递该值表示获取;否则表示设置
63
+ * @returns
64
+ */
65
+ export declare function attr(elem: HTMLElement, key: string, value?: string): string;
package/lib/dom.js CHANGED
@@ -59,3 +59,61 @@ export function transform(element, value) {
59
59
  export function on(element, listener, event, once = false) {
60
60
  element.addEventListener(listener, event, { once });
61
61
  }
62
+ /**
63
+ * 设置或获取节点的 innerHTML 属性
64
+ * @param element
65
+ * @param htmlstr 可选,如果传递该参数,则表示设置;否则表示获取
66
+ * @returns
67
+ */
68
+ export function html(element, htmlstr) {
69
+ if (htmlstr == null) {
70
+ return element.innerHTML;
71
+ }
72
+ else {
73
+ element.innerHTML = htmlstr;
74
+ return undefined;
75
+ }
76
+ }
77
+ /**
78
+ * 设置或获取节点的 textContent 属性
79
+ * @param element
80
+ * @param textstr 可选,如果传递该参数,则表示设置;否则表示获取
81
+ * @returns
82
+ */
83
+ export function text(element, textstr) {
84
+ if (textstr == null) {
85
+ return element.textContent;
86
+ }
87
+ else {
88
+ element.textContent = textstr;
89
+ return undefined;
90
+ }
91
+ }
92
+ /**
93
+ * 节点列表遍历
94
+ * @param elems
95
+ * @param fn 遍历到节点时的回调,回调第一个参数为遍历到的节点,第2个参数为 index;如果回调函数返回 true,则会终止遍历(break)
96
+ */
97
+ export function iterate(elems, fn) {
98
+ for (let i = 0, len = elems.length; i < len; i++) {
99
+ let r = fn(elems[i], i);
100
+ if (r === true) {
101
+ break;
102
+ }
103
+ }
104
+ }
105
+ /**
106
+ * 设置或获取节点 data-* 属性
107
+ * @param elem
108
+ * @param key data- 后面跟随的值
109
+ * @param value 如果传递该值表示获取;否则表示设置
110
+ * @returns
111
+ */
112
+ export function attr(elem, key, value) {
113
+ if (value != null) {
114
+ elem.setAttribute('data-' + key, value);
115
+ }
116
+ else {
117
+ return elem.getAttribute('data-' + key);
118
+ }
119
+ }
package/lib/index.js CHANGED
@@ -60,6 +60,11 @@ exports.isBoolean = isBoolean;
60
60
  * 带有错误名称标记的错误类型
61
61
  */
62
62
  class BaseError extends Error {
63
+ /**
64
+ * 错误名称,类似于 Java 中的不同的 Exception[NullPointerException];
65
+ * 增加 name 字段,表明不同的错误,当需要根据不同的错误执行不同的处理的时候,会很有用
66
+ */
67
+ name;
63
68
  constructor() {
64
69
  if (arguments.length === 1) {
65
70
  super(arguments[0]);
package/lib/web.d.ts CHANGED
@@ -3,13 +3,15 @@
3
3
  * @param form {object} Form 节点对象
4
4
  */
5
5
  export declare const formJson: <T>(form: HTMLFormElement) => T;
6
+ interface QueryRes {
7
+ [index: string]: number | boolean | string | string[];
8
+ }
6
9
  /**
7
10
  * 获取 url query 参数 (get 请求的参数)
8
- * @param key 获取指定 key 的参数,可选,如果不传该参数,则返回解析到的所有的参数列表
9
11
  * @param search 如果是 React 应用就需要传递 useLocation().search
10
12
  * @returns
11
13
  */
12
- export declare function query(key?: string | string[], search?: string | string[]): unknown;
14
+ export declare function query(search?: string): QueryRes;
13
15
  interface RandomOpts {
14
16
  /** 生成的随机数是整形还是小数形 */
15
17
  isInt?: boolean;
package/lib/web.js CHANGED
@@ -30,54 +30,39 @@ 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(key, search) {
36
+ export function query(search) {
38
37
  if (isBlank(search)) {
39
38
  search = location.search;
40
39
  }
41
40
  let query = {};
42
- if (search.indexOf('?') !== -1) {
43
- search = search.substring(1).split('&');
44
- search.forEach((item) => {
45
- item = item.split('=');
46
- let oldValue = query[item[0]];
47
- let value = decodeURIComponent(item[1]);
48
- if (isBoolean(value)) {
49
- // boolean
50
- value = Boolean(value);
51
- }
52
- else if (isNumeric(value)) {
53
- // 数字
54
- value = Number(value);
41
+ /*
42
+ 使用正则表达式解析,主要利用 反向字符集
43
+ */
44
+ search.replace(/([^?&=]+)=([^&]+)/g, (_, k, v) => {
45
+ let oldValue = query[k];
46
+ let value = decodeURIComponent(v);
47
+ if (isBoolean(value)) {
48
+ value = Boolean(value);
49
+ }
50
+ else if (isNumeric(value)) {
51
+ value = Number(value);
52
+ }
53
+ if (oldValue != null) {
54
+ if (oldValue instanceof Array) {
55
+ oldValue.push(value);
56
+ value = oldValue;
55
57
  }
56
- if (oldValue != null) {
57
- if (oldValue instanceof Array) {
58
- oldValue.push(value);
59
- value = oldValue;
60
- }
61
- else {
62
- value = [oldValue, value];
63
- }
58
+ else {
59
+ value = [value, oldValue];
64
60
  }
65
- query[item[0]] = value;
66
- });
67
- }
68
- if (key == null) {
69
- return query;
70
- }
71
- else if (typeof key === 'string') {
72
- return query[key];
73
- }
74
- else {
75
- const res = {};
76
- key.forEach((ki) => {
77
- res[ki] = query[ki];
78
- });
79
- return res;
80
- }
61
+ }
62
+ query[k] = value;
63
+ return v;
64
+ });
65
+ return query;
81
66
  }
82
67
  export function random() {
83
68
  let r = Math.random();
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.0.12",
8
+ "version": "0.1.1",
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.2.4"
22
+ "typescript": "^4.4.4"
23
23
  },
24
24
  "scripts": {
25
25
  "build": "node scripts/build.js"