74 lines
1.6 KiB
Plaintext
74 lines
1.6 KiB
Plaintext
import * as fns from "date-manip";
|
|
export * from "date-manip";
|
|
const { parse, get, set } = fns;
|
|
class DateChain {
|
|
constructor(input, format) {
|
|
const _input = input instanceof DateChain ? input._d : input;
|
|
this._i = input;
|
|
this._f = format;
|
|
this._d = parse(_input, format);
|
|
}
|
|
clone() {
|
|
return new DateChain(this, this._f);
|
|
}
|
|
toArray() {
|
|
const date = this._d;
|
|
return [
|
|
get(date, "year"),
|
|
get(date, "month"),
|
|
get(date, "date"),
|
|
get(date, "hours"),
|
|
get(date, "minutes"),
|
|
get(date, "seconds"),
|
|
get(date, "milliseconds")
|
|
// -date.getTimezoneOffset()
|
|
];
|
|
}
|
|
toDate() {
|
|
return new Date(this._d);
|
|
}
|
|
toISOString() {
|
|
return this._d.toISOString();
|
|
}
|
|
toJSON() {
|
|
return this.toISOString();
|
|
}
|
|
toString() {
|
|
return this._d.toString();
|
|
}
|
|
valueOf() {
|
|
return this._d.valueOf();
|
|
}
|
|
}
|
|
const proto = DateChain.prototype;
|
|
Object.entries(fns.units).forEach(([, method]) => {
|
|
const fn = function(val) {
|
|
if (val == null) {
|
|
return get(this._d, method);
|
|
}
|
|
set(this._d, method, val);
|
|
return this;
|
|
};
|
|
proto[method] = fn;
|
|
if (method !== "time") {
|
|
proto[`${method}s`] = fn;
|
|
}
|
|
});
|
|
const exclude = ["compile", "parse", "units"];
|
|
Object.entries(fns).forEach(([name, method]) => {
|
|
if (!exclude.includes(name)) {
|
|
proto[name] = function() {
|
|
const date = this._d;
|
|
const ret = method(date, ...arguments);
|
|
return ret === date ? this : ret;
|
|
};
|
|
}
|
|
DateChain[name] = method;
|
|
});
|
|
function chain(input, format) {
|
|
return new DateChain(input, format);
|
|
}
|
|
export {
|
|
chain
|
|
};
|