cerceis-lib
Version:
Contains list of quality of life functions that is written in TypeScript and es6
1 lines • 8.29 kB
Source Map (JSON)
{"version":3,"sources":["../../src/time/index.ts"],"sourcesContent":["export interface FormatOptions {\n time?: boolean;\n asObject?: boolean;\n}\n\nexport interface ObjectifiedDate {\n Y: number;\n M: number;\n D: number;\n h?: number;\n m?: number;\n s?: number;\n}\n\nconst toMs = (h = 0, m = 0, s = 0, ms = 0): number =>\n h * 3_600_000 + m * 60_000 + s * 1_000 + ms;\n\nconst toSeconds = (h = 0, m = 0, s = 0, ms = 0): number =>\n h * 3600 + m * 60 + s + ms / 1000;\n\nconst toMinutes = (h = 0, m = 0, s = 0, ms = 0): number =>\n h * 60 + m + s / 60 + ms / 60_000;\n\nconst toHours = (h = 0, m = 0, s = 0, ms = 0): number =>\n h + m / 60 + s / 3600 + ms / 3_600_000;\n\nexport const isDateObject = (d: unknown): d is Date =>\n Object.prototype.toString.call(d) === \"[object Date]\";\n\nexport const FromTime = {\n jpnDayMap: {\n 0: \"日\", 1: \"月\", 2: \"火\", 3: \"水\",\n 4: \"木\", 5: \"金\", 6: \"土\",\n } as Record<number, string>,\n\n toMs, toSeconds, toMinutes, toHours,\n\n /**\n * Format a Date into \"YYYY-MM-DD HH:mm:ss\" (UTC).\n * @param date Date object\n * @param options time: include time portion; asObject: return ObjectifiedDate\n */\n format(date: Date, options: FormatOptions = {}): string | ObjectifiedDate {\n const opts = { time: true, asObject: false, ...options };\n const iso = date.toISOString();\n if (opts.time) {\n if (opts.asObject)\n return {\n Y: Number(iso.slice(0, 4)),\n M: Number(iso.slice(5, 7)),\n D: Number(iso.slice(8, 10)),\n h: Number(iso.slice(11, 13)),\n m: Number(iso.slice(14, 16)),\n s: Number(iso.slice(17, 19)),\n };\n return `${iso.slice(0, 10)} ${iso.slice(11, 19)}`;\n }\n if (opts.asObject)\n return {\n Y: Number(iso.slice(0, 4)),\n M: Number(iso.slice(5, 7)),\n D: Number(iso.slice(8, 10)),\n };\n return iso.slice(0, 10);\n },\n\n /**\n * Convert a date string to the shortest readable locale string.\n * Year > Month > Day > Same day > time only.\n * Currently supports \"jpn\" only.\n * @param input Date string\n * @param locale Language code (default \"jpn\")\n */\n toDateTimeShortLocale(input: string, locale: string = \"jpn\"): string {\n const date = new Date(input);\n const now = new Date();\n\n if (now.getFullYear() !== date.getFullYear())\n return `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, \"0\")}-${String(date.getDate()).padStart(2, \"0\")}`;\n\n if (now.getMonth() !== date.getMonth()) {\n if (locale === \"jpn\") return `${date.getMonth() + 1}月${date.getDate()}日`;\n }\n\n if (now.getDate() !== date.getDate()) {\n if (locale === \"jpn\") return `${date.getDate()}日${this.jpnDayMap[date.getDay()]}`;\n }\n\n if (locale === \"jpn\")\n return `${String(date.getHours()).padStart(2, \"0\")}:${String(date.getMinutes()).padStart(2, \"0\")}`;\n\n return \"\";\n },\n};\n\nexport class cDate {\n private _date: ObjectifiedDate;\n\n constructor(date: string | Date) {\n const d = isDateObject(date) ? date : new Date(date);\n this._date = FromTime.format(d, { asObject: true }) as ObjectifiedDate;\n }\n\n /**\n * Add N months to the stored date.\n * @param n Number of months to add\n */\n addMonth(n: number): void {\n // Use Date.UTC so the result stays consistent with toISOString() (UTC-based)\n const d = new Date(Date.UTC(\n this._date.Y,\n (this._date.M - 1) + n, // month is 0-indexed\n this._date.D,\n this._date.h ?? 0,\n this._date.m ?? 0,\n this._date.s ?? 0,\n ));\n this._date = FromTime.format(d, { asObject: true }) as ObjectifiedDate;\n }\n\n get dateTime(): string {\n return (\n `${this._date.Y}-` +\n `${String(this._date.M).padStart(2, \"0\")}-` +\n `${String(this._date.D).padStart(2, \"0\")} ` +\n `${String(this._date.h ?? 0).padStart(2, \"0\")}:` +\n `${String(this._date.m ?? 0).padStart(2, \"0\")}:` +\n `${String(this._date.s ?? 0).padStart(2, \"0\")}`\n );\n }\n\n get date(): string {\n return (\n `${this._date.Y}-` +\n `${String(this._date.M).padStart(2, \"0\")}-` +\n `${String(this._date.D).padStart(2, \"0\")}`\n );\n }\n\n get time(): string {\n return (\n `${String(this._date.h ?? 0).padStart(2, \"0\")}:` +\n `${String(this._date.m ?? 0).padStart(2, \"0\")}:` +\n `${String(this._date.s ?? 0).padStart(2, \"0\")}`\n );\n }\n}\n"],"mappings":"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","names":[]}