ee93ff8ea0
#61 #61 Merge remote-tracking branch 'origin/main' into feature/061 #61 #61 #61 #61 #61 #61 #61 #61 #61 #61 日づけ不詳の表示修正 Co-authored-by: miteruzo <miteruzo@naver.com> Reviewed-on: #298
74 lines
2.3 KiB
TypeScript
74 lines
2.3 KiB
TypeScript
import { clsx } from 'clsx'
|
|
import { twMerge } from 'tailwind-merge'
|
|
|
|
import type { ClassValue } from 'clsx'
|
|
|
|
|
|
export const toDate = (d: string | Date): Date => typeof d === 'string' ? new Date (d) : d
|
|
|
|
|
|
export const cn = (...inputs: ClassValue[]) => twMerge (clsx (...inputs))
|
|
|
|
|
|
export const dateString = (
|
|
d: string | Date,
|
|
unknown: 'month' | 'day' | 'hour' | 'minute' | 'second' | null = null,
|
|
): string =>
|
|
toDate (d).toLocaleString (
|
|
'ja-JP-u-ca-japanese',
|
|
{ era: 'long',
|
|
year: 'numeric',
|
|
month: (unknown === 'month' ? undefined : 'long'),
|
|
day: unknown != null && ['month', 'day'].includes (unknown) ? undefined : 'numeric',
|
|
weekday: unknown != null && ['month', 'day'].includes (unknown) ? undefined : 'short',
|
|
hour: unknown == null || ['second', 'minute'].includes (unknown) ? 'numeric' : undefined,
|
|
minute: unknown == null || unknown === 'second' ? 'numeric' : undefined,
|
|
second: unknown == null ? 'numeric' : undefined })
|
|
|
|
|
|
export const originalCreatedAtString = (
|
|
f: string | Date | null,
|
|
b: string | Date | null,
|
|
): string => {
|
|
const from = f ? toDate (f) : null
|
|
const before = b ? toDate (b) : null
|
|
|
|
if (from && before)
|
|
{
|
|
const diff = before.getTime () - from.getTime ()
|
|
|
|
if (diff <= 60_000 /* 1 分 */)
|
|
return dateString (from, 'second')
|
|
|
|
if (from.getMinutes () === 0 && before.getMinutes () === 0)
|
|
{
|
|
if (Math.abs (diff - 3_600_000 /* 1 時間 */) < 60_000)
|
|
return dateString (from, 'minute') + ' (分不詳)'
|
|
|
|
if (from.getHours () === 0 && before.getHours () === 0)
|
|
{
|
|
if (Math.abs (diff - 86_400_000 /* 1 日 */) < 60_000)
|
|
return dateString (from, 'hour') + ' (時刻不詳)'
|
|
|
|
if (from.getDate () === 1 && before.getDate () === 1)
|
|
{
|
|
if (2_332_800_000 /* 27 日 */ < diff && diff < 2_764_800_000 /* 32 日 */)
|
|
return dateString (from, 'day') + ' (日不詳)'
|
|
|
|
if (from.getMonth () === 0 && before.getMonth () === 0
|
|
&& (31_449_600_000 /* 364 日 */ <= diff
|
|
&& diff < 31_708_800_000 /* 367 日 */))
|
|
return dateString (from, 'month') + ' (月日不詳)'
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
const rtn = ([from ? `${ dateString (from, 'second') }` : '',
|
|
'〜',
|
|
before ? `${ dateString (new Date (before.getTime () - 60_000), 'second') }` : '']
|
|
.filter (Boolean)
|
|
.join (' '))
|
|
return rtn === '〜' ? '年月日不詳' : rtn
|
|
}
|