use iso & utc dates

AuthorKonata <konata@posteo.jp>
Date
Commita0b441f8aaa438242d3b69730681fd4b35d435be
Parent7e2e62e
10 files changed, 55 insertions(+), 37 deletions(-)
▾Asrc/lib/formatDate.ts
@@ -0,0 +1,32 @@
export function formatDate(iso: string): string {
try {
return new Intl.DateTimeFormat("en-CA", {
timeZone: "UTC",
year: "numeric",
month: "2-digit",
day: "2-digit",
}).format(new Date(iso));
} catch {
return iso;
}
}
export function formatDateTime(iso: string): string {
try {
const parts = new Intl.DateTimeFormat("en-CA", {
timeZone: "UTC",
year: "numeric",
month: "2-digit",
day: "2-digit",
hour: "2-digit",
minute: "2-digit",
second: "2-digit",
hour12: false,
}).formatToParts(new Date(iso));
const get = (type: string) =>
parts.find((p) => p.type === type)?.value ?? "";
return `${get("year")}-${get("month")}-${get("day")} ${get("hour")}:${get("minute")}:${get("second")} UTC`;
} catch {
return iso;
}
}
▾Msrc/views/DateWithEdited.tsx
@@ -1,3 +1,5 @@
import { formatDate, formatDateTime } from "../lib/formatDate.ts";
export function DateWithEdited({
date,
editedAt,
@@ -5,13 +7,13 @@ export function DateWithEdited({
date: string;
editedAt: string | null;
}) {
const label = new Date(date).toLocaleDateString();
const label = formatDate(date);
if (!editedAt) return <time datetime={date}>{label}</time>;
return (
<time
datetime={date}
class="edited-indicator"
title={`Edited ${new Date(editedAt).toLocaleString()}`}
title={`Edited ${formatDateTime(editedAt)}`}
>
*{label}
</time>
▾Msrc/views/Settings.tsx
@@ -1,3 +1,4 @@
import { formatDate } from "../lib/formatDate.ts";
import type { SessionUser } from "../middleware/session.ts";
import { Avatar } from "./Avatar.tsx";
import { Layout } from "./layout.tsx";
@@ -283,9 +284,7 @@ export function Settings({
<div class="passkey-item">
<span class="passkey-date">
Added{" "}
{new Date(
pk.created_at,
).toLocaleDateString()}
{formatDate(pk.created_at)}
</span>
<form
method="POST"
@@ -352,9 +351,7 @@ export function Settings({
</span>
<span class="passkey-date">
Added{" "}
{new Date(
key.created_at,
).toLocaleDateString()}
{formatDate(key.created_at)}
</span>
</div>
<form
▾Msrc/views/issues/IssueList.tsx
@@ -1,4 +1,5 @@
import type { IssueRow, RepositoryRow } from "../../db/index.ts";
import { formatDate } from "../../lib/formatDate.ts";
import { displayName } from "../../lib/users.ts";
import type { SessionUser } from "../../middleware/session.ts";
import { Avatar } from "../Avatar.tsx";
@@ -106,9 +107,7 @@ export function IssueList({
{displayName(issue.author_username)}
</span>
<time datetime={issue.created_at}>
{new Date(
issue.created_at,
).toLocaleDateString()}
{formatDate(issue.created_at)}
</time>
</div>
</li>
▾Msrc/views/patches/PatchList.tsx
@@ -1,4 +1,5 @@
import type { PatchRow, RepositoryRow } from "../../db/index.ts";
import { formatDate } from "../../lib/formatDate.ts";
import { displayName } from "../../lib/users.ts";
import type { SessionUser } from "../../middleware/session.ts";
import { Avatar } from "../Avatar.tsx";
@@ -103,9 +104,7 @@ export function PatchList({
by {displayName(patch.author_username)}
</span>
<time datetime={patch.created_at}>
{new Date(
patch.created_at,
).toLocaleDateString()}
{formatDate(patch.created_at)}
</time>
</div>
</li>
▾Msrc/views/releases/ReleaseDetail.tsx
@@ -3,6 +3,7 @@ import type {
ReleaseRow,
RepositoryRow,
} from "../../db/index.ts";
import { formatDate } from "../../lib/formatDate.ts";
import type { SessionUser } from "../../middleware/session.ts";
import { Layout } from "../layout.tsx";
import { RepoHeader } from "../repos/RepoHeader.tsx";
@@ -72,9 +73,7 @@ export function ReleaseDetail({
<div class="release-item-date">
<span class="badge">{release.tag_name}</span>
<time datetime={release.created_at}>
{new Date(
release.created_at,
).toLocaleDateString()}
{formatDate(release.created_at)}
</time>
</div>
</div>
▾Msrc/views/releases/ReleaseList.tsx
@@ -1,4 +1,5 @@
import type { ReleaseRow, RepositoryRow } from "../../db/index.ts";
import { formatDate } from "../../lib/formatDate.ts";
import type { SessionUser } from "../../middleware/session.ts";
import {
markdownToPlaintext,
@@ -97,9 +98,7 @@ export function ReleaseList({
{release.tag_name}
</span>
<time datetime={release.created_at}>
{new Date(
release.created_at,
).toLocaleDateString()}
{formatDate(release.created_at)}
</time>
</div>
</div>
▾Msrc/views/repos/CommitDetail.tsx
@@ -1,5 +1,6 @@
import { escapeHtml } from "@kitajs/html";
import type { RepositoryRow } from "../../db/index.ts";
import { formatDateTime } from "../../lib/formatDate.ts";
import type { SessionUser } from "../../middleware/session.ts";
import type { RenderedDiffFile } from "../../services/diffHighlight.ts";
import type { CommitMeta } from "../../services/git.ts";
@@ -16,17 +17,6 @@ interface CommitDetailProps {
files: RenderedDiffFile[];
}
function formatDate(iso: string): string {
try {
return new Date(iso).toLocaleString(undefined, {
dateStyle: "medium",
timeStyle: "short",
});
} catch {
return iso;
}
}
export function CommitDetail({
user,
repo,
@@ -76,7 +66,7 @@ export function CommitDetail({
class="commit-meta-value"
datetime={meta.date}
>
{formatDate(meta.date)}
{formatDateTime(meta.date)}
</time>
</div>
{(meta.committer !== meta.author ||
@@ -100,7 +90,7 @@ export function CommitDetail({
class="commit-meta-value"
datetime={meta.committerDate}
>
{formatDate(meta.committerDate)}
{formatDateTime(meta.committerDate)}
</time>
</div>
</>
▾Msrc/views/repos/CommitLog.tsx
@@ -1,4 +1,6 @@
import type { RepositoryRow } from "../../db/index.ts";
import { formatDateTime } from "../../lib/formatDate.ts";
import type { SessionUser } from "../../middleware/session.ts";
import type { CommitEntry } from "../../services/git.ts";
import { Layout } from "../layout.tsx";
@@ -66,7 +68,7 @@ export function CommitLog({
{c.hash.slice(0, 7)}
</a>
<time class="commit-date" datetime={c.date}>
{new Date(c.date).toLocaleString()}
{formatDateTime(c.date)}
</time>
</div>
</li>
▾Msrc/views/repos/RepoList.tsx
@@ -1,4 +1,5 @@
import type { RepositoryRow } from "../../db/index.ts";
import { formatDate } from "../../lib/formatDate.ts";
import type { SessionUser } from "../../middleware/session.ts";
import { Layout } from "../layout.tsx";
import { Pagination, type PaginationInfo } from "../Pagination.tsx";
@@ -76,9 +77,7 @@ export function RepoList({ user, repos, search, pagination }: RepoListProps) {
class="repo-date"
datetime={repo.created_at}
>
{new Date(
repo.created_at,
).toLocaleDateString()}
{formatDate(repo.created_at)}
</time>
</div>
</li>