typescript-util
Version:
JS/TS 的简单工具
120 lines • 4.2 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.Week = void 0;
const BaseObject_1 = require("../model/BaseObject");
// noinspection JSUnusedGlobalSymbols
/**
* Week
* @author LL
* @date 2022-02-09 下午 02:34
**/
class Week extends BaseObject_1.BaseObject {
static MONDAY = new Week(1, '星期一', '周一');
static TUESDAY = new Week(2, '星期二', '周二');
static WEDNESDAY = new Week(3, '星期三', '周三');
static THURSDAY = new Week(4, '星期四', '周四');
static FRIDAY = new Week(5, '星期五', '周五');
static SATURDAY = new Week(6, '星期六', '周六');
static SUNDAY = new Week(7, '星期天', '周日');
static 星期一 = Week.MONDAY;
static 星期二 = Week.TUESDAY;
static 星期三 = Week.WEDNESDAY;
static 星期四 = Week.THURSDAY;
static 星期五 = Week.FRIDAY;
static 星期六 = Week.SATURDAY;
static 星期天 = Week.SUNDAY;
/**
* 私有缓存
* @type {Array<Week>}
* @private
*/
static CACHE = [Week.MONDAY, Week.TUESDAY, Week.WEDNESDAY, Week.THURSDAY, Week.FRIDAY, Week.SATURDAY, Week.SUNDAY];
static WEEK_MIN_VALUE = 1;
static WEEK_MAX_VALUE = 7;
value;
fullName;
simpleName;
constructor(value, fullName, simpleName) {
super();
this.value = value;
this.fullName = fullName;
this.simpleName = simpleName;
}
/**
* 从 value 值获取Week的实例。 Week是代表一周中的某一天。
* 此工厂允许从 number 值获取枚举。number 值遵循 ISO-8601 标准,从1(周一)到7(周日)。
* @param {number} value [1-7] 代表一周中的一天,从1(周一)到7(周日)
* @return {Week} 一周中的某一天,不为空
*/
static of(value) {
// noinspection SuspiciousTypeOfGuard
if (typeof value !== 'number') {
throw new Error('Type 错误: 期望 Number');
}
if (value < Week.WEEK_MIN_VALUE || value > Week.WEEK_MAX_VALUE) {
throw new Error('Week Value 无效: ' + value);
}
return Week.CACHE[value - 1];
}
/**
* 从 {@link Date} 对象获取星期几, 使用 {@link Date#getDay()}
* @param {Date} date 日期对象
* @return {Week} 当前周几, 除非 date 为空, 否则用不为空
*/
static from(date) {
if (date === null || date === undefined) {
return null;
}
// 0-6: 周日 - 周六
const value = date.getDay();
if (value === 0) {
return Week.CACHE[Week.CACHE.length];
}
// 1-6: 周一 ~ 周六
return Week.CACHE[value - 1];
}
/**
* 返回指定天数后的星期几。 计算时间从周日到周一,大约在周末。
* 指定的时间段可能为负数。
* 此实例是不可变的,不受此方法调用的影响。
* @param {number} days 天数–要添加的天数,正值或负值
* @return {Week} 一周中的某一天,不为空
*/
plus(days) {
// noinspection SuspiciousTypeOfGuard
if (typeof days !== 'number') {
throw new Error('Type 错误: 期望 Number');
}
const v = days % Week.WEEK_MAX_VALUE;
if (v === 0) {
return this;
}
return Week.CACHE[(this.value + (v + Week.WEEK_MAX_VALUE)) % Week.WEEK_MAX_VALUE];
}
/**
* 返回指定天数之前的星期几。 计算时间为年初的周一至周日。指定的时间段可能为负数。
* 此实例是不可变的,不受此方法调用的影响。
* @param {number} days 天数–减去的天数,正或负
* @return {Week} 一周中的某一天,不为空
*/
minus(days) {
return this.plus(-days);
}
equals(o) {
if (!super.equals(o)) {
return false;
}
if (o == this) {
return true;
}
if (!(o instanceof Week)) {
return false;
}
return this.value === o.value;
}
toString() {
return this.fullName;
}
}
exports.Week = Week;
//# sourceMappingURL=Week.js.map