{"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":[]}