extes
Version:
A tiny library that extends native js with some handy tools
98 lines (90 loc) • 2.33 kB
JavaScript
/**
* Author: JCloudYu
* Create: 2019/09/20
**/
import {Padding} from "_helper/misc.esm.js";
const configurable=true, writable=true, enumerable=false;
//@export
(()=>{
Object.defineProperty(Date, 'from', {
writable, configurable, enumerable,
value: function(...args) {
if ( args.length === 0 ) {
throw new Error("Date.from expects at least one arguments!");
}
try {
return new Date(...args);
}
catch(e) {
return null;
}
}
});
Object.defineProperty(Date, 'present', {
configurable, enumerable,
get: ()=>new Date()
});
Object.defineProperty(Date, 'unix', {
writable, configurable, enumerable,
value: function() {
return Math.floor(Date.now()/1000);
}
});
Object.defineProperty(Date, 'zoneShift', {
writable, configurable, enumerable,
value: function() {
const date = new Date();
return date.getTimezoneOffset() * 60000;
}
});
Object.defineProperty(Date.prototype, 'getUnixTime', {
writable, configurable, enumerable,
value: function() {
return Math.floor(this.getTime()/1000);
}
});
Object.defineProperty(Date.prototype, 'toLocaleISOString', {
writable, configurable, enumerable,
value: function(show_milli=true){
let offset, zone = this.getTimezoneOffset();
if ( zone === 0 ) {
offset = 'Z';
}
else {
const sign = zone > 0 ? '-' : '+';
zone = Math.abs(zone);
const zone_hour = Math.floor(zone/60);
const zone_min = zone%60;
offset = sign + Padding(zone_hour) + Padding(zone_min);
}
const milli = show_milli ? ('.' + Padding(this.getMilliseconds() % 1000, 3)) : '';
return this.getFullYear() +
'-' + Padding(this.getMonth()+1) +
'-' + Padding(this.getDate()) +
'T' + Padding(this.getHours()) +
':' + Padding(this.getMinutes()) +
':' + Padding(this.getSeconds()) +
milli + offset;
}
});
// getter
Object.defineProperty(Date.prototype, 'unix', {
configurable, enumerable,
get: function() {
return Math.floor(this.getTime()/1000);
}
});
Object.defineProperty(Date.prototype, 'time', {
configurable, enumerable,
get: function() {
return this.getTime();
}
});
Object.defineProperty(Date.prototype, 'zoneShift', {
configurable, enumerable,
get: function() {
return this.getTimezoneOffset() * 60000;
}
});
})();
//@endexport