mirror of
https://github.com/home-assistant/frontend.git
synced 2025-11-08 18:39:40 +00:00
120 lines
3.4 KiB
TypeScript
120 lines
3.4 KiB
TypeScript
import { HassConfig } from "home-assistant-js-websocket";
|
|
import memoizeOne from "memoize-one";
|
|
import { FrontendLocaleData } from "../../data/translation";
|
|
import "../../resources/intl-polyfill";
|
|
import { formatDateNumeric } from "./format_date";
|
|
import { formatTime } from "./format_time";
|
|
import { useAmPm } from "./use_am_pm";
|
|
|
|
// August 9, 2021, 8:23 AM
|
|
export const formatDateTime = (
|
|
dateObj: Date,
|
|
locale: FrontendLocaleData,
|
|
config: HassConfig
|
|
) => formatDateTimeMem(locale, config.time_zone).format(dateObj);
|
|
|
|
const formatDateTimeMem = memoizeOne(
|
|
(locale: FrontendLocaleData, serverTimeZone: string) =>
|
|
new Intl.DateTimeFormat(
|
|
locale.language === "en" && !useAmPm(locale)
|
|
? "en-u-hc-h23"
|
|
: locale.language,
|
|
{
|
|
year: "numeric",
|
|
month: "long",
|
|
day: "numeric",
|
|
hour: useAmPm(locale) ? "numeric" : "2-digit",
|
|
minute: "2-digit",
|
|
hour12: useAmPm(locale),
|
|
timeZone: locale.time_zone === "server" ? serverTimeZone : undefined,
|
|
}
|
|
)
|
|
);
|
|
|
|
// Aug 9, 2021, 8:23 AM
|
|
export const formatShortDateTimeWithYear = (
|
|
dateObj: Date,
|
|
locale: FrontendLocaleData,
|
|
config: HassConfig
|
|
) => formatShortDateTimeWithYearMem(locale, config.time_zone).format(dateObj);
|
|
|
|
const formatShortDateTimeWithYearMem = memoizeOne(
|
|
(locale: FrontendLocaleData, serverTimeZone: string) =>
|
|
new Intl.DateTimeFormat(
|
|
locale.language === "en" && !useAmPm(locale)
|
|
? "en-u-hc-h23"
|
|
: locale.language,
|
|
{
|
|
year: "numeric",
|
|
month: "short",
|
|
day: "numeric",
|
|
hour: useAmPm(locale) ? "numeric" : "2-digit",
|
|
minute: "2-digit",
|
|
hour12: useAmPm(locale),
|
|
timeZone: locale.time_zone === "server" ? serverTimeZone : undefined,
|
|
}
|
|
)
|
|
);
|
|
|
|
// Aug 9, 8:23 AM
|
|
export const formatShortDateTime = (
|
|
dateObj: Date,
|
|
locale: FrontendLocaleData,
|
|
config: HassConfig
|
|
) => formatShortDateTimeMem(locale, config.time_zone).format(dateObj);
|
|
|
|
const formatShortDateTimeMem = memoizeOne(
|
|
(locale: FrontendLocaleData, serverTimeZone: string) =>
|
|
new Intl.DateTimeFormat(
|
|
locale.language === "en" && !useAmPm(locale)
|
|
? "en-u-hc-h23"
|
|
: locale.language,
|
|
{
|
|
month: "short",
|
|
day: "numeric",
|
|
hour: useAmPm(locale) ? "numeric" : "2-digit",
|
|
minute: "2-digit",
|
|
hour12: useAmPm(locale),
|
|
timeZone: locale.time_zone === "server" ? serverTimeZone : undefined,
|
|
}
|
|
)
|
|
);
|
|
|
|
// August 9, 2021, 8:23:15 AM
|
|
export const formatDateTimeWithSeconds = (
|
|
dateObj: Date,
|
|
locale: FrontendLocaleData,
|
|
config: HassConfig
|
|
) => formatDateTimeWithSecondsMem(locale, config.time_zone).format(dateObj);
|
|
|
|
const formatDateTimeWithSecondsMem = memoizeOne(
|
|
(locale: FrontendLocaleData, serverTimeZone: string) =>
|
|
new Intl.DateTimeFormat(
|
|
locale.language === "en" && !useAmPm(locale)
|
|
? "en-u-hc-h23"
|
|
: locale.language,
|
|
{
|
|
year: "numeric",
|
|
month: "long",
|
|
day: "numeric",
|
|
hour: useAmPm(locale) ? "numeric" : "2-digit",
|
|
minute: "2-digit",
|
|
second: "2-digit",
|
|
hour12: useAmPm(locale),
|
|
timeZone: locale.time_zone === "server" ? serverTimeZone : undefined,
|
|
}
|
|
)
|
|
);
|
|
|
|
// 9/8/2021, 8:23 AM
|
|
export const formatDateTimeNumeric = (
|
|
dateObj: Date,
|
|
locale: FrontendLocaleData,
|
|
config: HassConfig
|
|
) =>
|
|
`${formatDateNumeric(dateObj, locale, config)}, ${formatTime(
|
|
dateObj,
|
|
locale,
|
|
config
|
|
)}`;
|