UNPKG

typescript-util

Version:

JS/TS 的简单工具

116 lines 4.07 kB
import { BaseObject } from '../model/BaseObject'; // noinspection JSUnusedGlobalSymbols /** * Week * @author LL * @date 2022-02-09 下午 02:34 **/ export class Week extends 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; } } //# sourceMappingURL=Week.js.map