diff --git a/app/__test__/core/utils.spec.ts b/app/__test__/core/utils.spec.ts index 3de8a48..8b8a185 100644 --- a/app/__test__/core/utils.spec.ts +++ b/app/__test__/core/utils.spec.ts @@ -1,5 +1,5 @@ import { describe, expect, test } from "bun:test"; -import { Perf, isBlob, ucFirst } from "../../src/core/utils"; +import { Perf, datetimeStringUTC, isBlob, ucFirst } from "../../src/core/utils"; import * as utils from "../../src/core/utils"; async function wait(ms: number) { @@ -245,4 +245,14 @@ describe("Core Utils", async () => { } }); }); + + describe("dates", () => { + test.only("formats local time", () => { + expect(utils.datetimeStringUTC("2025-02-21T16:48:25.841Z")).toBe("2025-02-21 16:48:25"); + console.log(utils.datetimeStringUTC(new Date())); + console.log(utils.datetimeStringUTC()); + console.log(new Date()); + console.log("timezone", Intl.DateTimeFormat().resolvedOptions().timeZone); + }); + }); }); diff --git a/app/src/core/utils/dates.ts b/app/src/core/utils/dates.ts index c33b496..4628004 100644 --- a/app/src/core/utils/dates.ts +++ b/app/src/core/utils/dates.ts @@ -11,4 +11,21 @@ declare module "dayjs" { dayjs.extend(weekOfYear); +export function datetimeStringLocal(dateOrString?: string | Date | undefined): string { + return dayjs(dateOrString).format("YYYY-MM-DD HH:mm:ss"); +} + +export function datetimeStringUTC(dateOrString?: string | Date | undefined): string { + const date = dateOrString ? new Date(dateOrString) : new Date(); + return date.toISOString().replace("T", " ").split(".")[0]!; +} + +export function getTimezoneOffset(): number { + return new Date().getTimezoneOffset(); +} + +export function getTimezone(): string { + return Intl.DateTimeFormat().resolvedOptions().timeZone; +} + export { dayjs }; diff --git a/app/src/modules/server/SystemController.ts b/app/src/modules/server/SystemController.ts index 79b9064..728a73f 100644 --- a/app/src/modules/server/SystemController.ts +++ b/app/src/modules/server/SystemController.ts @@ -2,7 +2,15 @@ import type { App } from "App"; import { tbValidator as tb } from "core"; -import { StringEnum, Type, TypeInvalidError } from "core/utils"; +import { + StringEnum, + Type, + TypeInvalidError, + datetimeStringLocal, + datetimeStringUTC, + getTimezone, + getTimezoneOffset +} from "core/utils"; import { getRuntimeKey } from "core/utils"; import type { Context, Hono } from "hono"; import { Controller } from "modules/Controller"; @@ -273,7 +281,13 @@ export class SystemController extends Controller { hono.get("/info", (c) => c.json({ version: c.get("app")?.version(), - runtime: getRuntimeKey() + runtime: getRuntimeKey(), + timezone: { + name: getTimezone(), + offset: getTimezoneOffset(), + local: datetimeStringLocal(), + utc: datetimeStringUTC() + } }) );