easyjs-time 0.1.0
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/README.md +26 -0
- package/package.json +17 -0
- package/src/index.js +95 -0
package/README.md
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# easyjs-time
|
|
2
|
+
|
|
3
|
+
Time plugin for EasyJS.
|
|
4
|
+
|
|
5
|
+
## Install
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm i easyjs-time
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Use
|
|
12
|
+
|
|
13
|
+
```js
|
|
14
|
+
const easy = require("easyjs-empty");
|
|
15
|
+
const time = require("easyjs-time");
|
|
16
|
+
|
|
17
|
+
easy.use(time); // loads basic
|
|
18
|
+
console.log(easy.time()); // seconds since epoch
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
To load the advanced set:
|
|
22
|
+
|
|
23
|
+
```js
|
|
24
|
+
easy.use(time.advanced);
|
|
25
|
+
```
|
|
26
|
+
Refer to the `easyjs-empty` Readme for more info.
|
package/package.json
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "easyjs-time",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "EasyJS time plugin (Python-style time helpers).",
|
|
5
|
+
"license": "ISC",
|
|
6
|
+
"type": "commonjs",
|
|
7
|
+
"main": "src/index.js",
|
|
8
|
+
"keywords": [
|
|
9
|
+
"easyjs",
|
|
10
|
+
"plugin",
|
|
11
|
+
"time",
|
|
12
|
+
"date",
|
|
13
|
+
"timer",
|
|
14
|
+
"sleep",
|
|
15
|
+
"javascript"
|
|
16
|
+
]
|
|
17
|
+
}
|
package/src/index.js
ADDED
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
// easyjs-time
|
|
2
|
+
const createSets = () => {
|
|
3
|
+
// --- basic time functions (Python-style) ---
|
|
4
|
+
const basic = {
|
|
5
|
+
now: () => new Date(),
|
|
6
|
+
time: () => Date.now() / 1000,
|
|
7
|
+
sleep: (seconds) => new Promise(resolve => setTimeout(resolve, Number(seconds) * 1000)),
|
|
8
|
+
ctime: (seconds) => {
|
|
9
|
+
const ms = seconds == null ? Date.now() : Number(seconds) * 1000;
|
|
10
|
+
return new Date(ms).toString();
|
|
11
|
+
},
|
|
12
|
+
localtime: (seconds) => {
|
|
13
|
+
const ms = seconds == null ? Date.now() : Number(seconds) * 1000;
|
|
14
|
+
return new Date(ms);
|
|
15
|
+
},
|
|
16
|
+
gmtime: (seconds) => {
|
|
17
|
+
const ms = seconds == null ? Date.now() : Number(seconds) * 1000;
|
|
18
|
+
return new Date(ms);
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
// --- advanced time functions ---
|
|
23
|
+
const advanced = {
|
|
24
|
+
timeMs: () => Date.now(),
|
|
25
|
+
timeNs: () => (typeof process !== "undefined" && process.hrtime && process.hrtime.bigint)
|
|
26
|
+
? process.hrtime.bigint()
|
|
27
|
+
: Math.floor(Date.now() * 1e6),
|
|
28
|
+
monotonic: () => (typeof performance !== "undefined" && performance.now)
|
|
29
|
+
? performance.now()
|
|
30
|
+
: Date.now(),
|
|
31
|
+
perfCounter: () => (typeof performance !== "undefined" && performance.now)
|
|
32
|
+
? performance.now()
|
|
33
|
+
: Date.now(),
|
|
34
|
+
perfCounterNs: () => (typeof process !== "undefined" && process.hrtime && process.hrtime.bigint)
|
|
35
|
+
? process.hrtime.bigint()
|
|
36
|
+
: Math.floor(Date.now() * 1e6),
|
|
37
|
+
sleepMs: (ms) => new Promise(resolve => setTimeout(resolve, Number(ms))),
|
|
38
|
+
timer: () => {
|
|
39
|
+
const start = (typeof performance !== "undefined" && performance.now) ? performance.now() : Date.now();
|
|
40
|
+
return () => {
|
|
41
|
+
const now = (typeof performance !== "undefined" && performance.now) ? performance.now() : Date.now();
|
|
42
|
+
return now - start;
|
|
43
|
+
};
|
|
44
|
+
},
|
|
45
|
+
elapsed: (startMs) => Date.now() - Number(startMs),
|
|
46
|
+
format: (date, pattern = "YYYY-MM-DD HH:mm:ss") => {
|
|
47
|
+
const d = date instanceof Date ? date : new Date(date);
|
|
48
|
+
const pad = (n, w = 2) => String(n).padStart(w, "0");
|
|
49
|
+
return pattern
|
|
50
|
+
.replace(/YYYY/g, String(d.getFullYear()))
|
|
51
|
+
.replace(/MM/g, pad(d.getMonth() + 1))
|
|
52
|
+
.replace(/DD/g, pad(d.getDate()))
|
|
53
|
+
.replace(/HH/g, pad(d.getHours()))
|
|
54
|
+
.replace(/mm/g, pad(d.getMinutes()))
|
|
55
|
+
.replace(/ss/g, pad(d.getSeconds()));
|
|
56
|
+
},
|
|
57
|
+
strftime: (fmt, date = new Date()) => {
|
|
58
|
+
const d = date instanceof Date ? date : new Date(date);
|
|
59
|
+
const pad = (n, w = 2) => String(n).padStart(w, "0");
|
|
60
|
+
return String(fmt)
|
|
61
|
+
.replace(/%Y/g, String(d.getFullYear()))
|
|
62
|
+
.replace(/%m/g, pad(d.getMonth() + 1))
|
|
63
|
+
.replace(/%d/g, pad(d.getDate()))
|
|
64
|
+
.replace(/%H/g, pad(d.getHours()))
|
|
65
|
+
.replace(/%M/g, pad(d.getMinutes()))
|
|
66
|
+
.replace(/%S/g, pad(d.getSeconds()));
|
|
67
|
+
},
|
|
68
|
+
timezoneOffsetMinutes: (date = new Date()) => -date.getTimezoneOffset()
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
// --- helper to add functions with override warnings ---
|
|
72
|
+
const addFuncs = (target, funcs) => {
|
|
73
|
+
for (const [name, fn] of Object.entries(funcs)) {
|
|
74
|
+
if (target[name]) {
|
|
75
|
+
console.log(`-- WARNING - overwriting ${name} - WARNING --`);
|
|
76
|
+
}
|
|
77
|
+
target[name] = fn;
|
|
78
|
+
}
|
|
79
|
+
};
|
|
80
|
+
|
|
81
|
+
return { basic, advanced, addFuncs };
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
const time = (easy) => {
|
|
85
|
+
const { basic, addFuncs } = createSets();
|
|
86
|
+
addFuncs(easy, basic);
|
|
87
|
+
};
|
|
88
|
+
|
|
89
|
+
// advanced plugin (function) for easy.use(time.advanced)
|
|
90
|
+
time.advanced = (easy) => {
|
|
91
|
+
const { basic, advanced, addFuncs } = createSets();
|
|
92
|
+
addFuncs(easy, { ...basic, ...advanced });
|
|
93
|
+
};
|
|
94
|
+
|
|
95
|
+
module.exports = time;
|