1 | function isValidDatetime(datetime) {
|
2 | return 'Invalid Date' !== `${new Date(datetime)}`;
|
3 | }
|
4 | function isNotANumber(value) {
|
5 | return value != null && isNaN(+value);
|
6 | }
|
7 | export function utcTimeSync({ startDatetime, offset, } = {}) {
|
8 | const isNullishDatetime = null == startDatetime;
|
9 | if (!isNullishDatetime && !isValidDatetime(startDatetime)) {
|
10 | throw new TypeError(`Expected 'startDatetime' to be a valid datetime, but received '${startDatetime}'`);
|
11 | }
|
12 | const { hour = 0, minute = 0, second = 0, millisecond = 0, } = offset || {};
|
13 | if (isNotANumber(hour)) {
|
14 | throw new TypeError(`Expected 'offset.hour' to be a number, but received '${hour}'`);
|
15 | }
|
16 | if (isNotANumber(minute)) {
|
17 | throw new TypeError(`Expected 'offset.minute' to be a number, but received '${minute}'`);
|
18 | }
|
19 | if (isNotANumber(second)) {
|
20 | throw new TypeError(`Expected 'offset.second' to be a number, but received '${second}'`);
|
21 | }
|
22 | if (isNotANumber(millisecond)) {
|
23 | throw new TypeError(`Expected 'offset.millisecond' to be a number, but received '${millisecond}'`);
|
24 | }
|
25 | const newDatetime = isNullishDatetime
|
26 | ? new Date()
|
27 | : new Date(startDatetime);
|
28 | return new Date(Date.UTC(newDatetime.getUTCFullYear(), newDatetime.getUTCMonth(), newDatetime.getUTCDate(), newDatetime.getUTCHours() + hour, newDatetime.getUTCMinutes() + minute, newDatetime.getUTCSeconds() + second, newDatetime.getUTCMilliseconds() + millisecond));
|
29 | }
|
30 | export async function utcTime(opts) {
|
31 | return utcTimeSync(opts);
|
32 | }
|
33 |
|
\ | No newline at end of file |