Initial commit: FunZone accounting frontend with Sepidar-inspired RTL modules
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
59
src/utils/format.ts
Normal file
59
src/utils/format.ts
Normal file
@@ -0,0 +1,59 @@
|
||||
const currencyFormatter = new Intl.NumberFormat('fa-IR', {
|
||||
maximumFractionDigits: 0,
|
||||
})
|
||||
|
||||
const numberFormatter = new Intl.NumberFormat('fa-IR', {
|
||||
maximumFractionDigits: 2,
|
||||
})
|
||||
|
||||
const jalaliDateFormatter = new Intl.DateTimeFormat('fa-IR-u-ca-persian', {
|
||||
year: 'numeric',
|
||||
month: '2-digit',
|
||||
day: '2-digit',
|
||||
})
|
||||
|
||||
const jalaliDateTimeFormatter = new Intl.DateTimeFormat('fa-IR-u-ca-persian', {
|
||||
year: 'numeric',
|
||||
month: '2-digit',
|
||||
day: '2-digit',
|
||||
hour: '2-digit',
|
||||
minute: '2-digit',
|
||||
})
|
||||
|
||||
/** Formats an amount as Toman with Persian digits and grouping. */
|
||||
export function formatMoney(amount: number): string {
|
||||
return currencyFormatter.format(Math.round(amount))
|
||||
}
|
||||
|
||||
export function formatMoneyWithUnit(amount: number, unit = 'تومان'): string {
|
||||
return `${formatMoney(amount)} ${unit}`
|
||||
}
|
||||
|
||||
export function formatNumber(value: number): string {
|
||||
return numberFormatter.format(value)
|
||||
}
|
||||
|
||||
/** Formats an ISO date string to a Jalali (Persian) date. */
|
||||
export function formatDate(iso: string): string {
|
||||
const date = new Date(iso)
|
||||
if (Number.isNaN(date.getTime())) return '-'
|
||||
return jalaliDateFormatter.format(date)
|
||||
}
|
||||
|
||||
export function formatDateTime(iso: string): string {
|
||||
const date = new Date(iso)
|
||||
if (Number.isNaN(date.getTime())) return '-'
|
||||
return jalaliDateTimeFormatter.format(date)
|
||||
}
|
||||
|
||||
/** Returns today's date as an ISO yyyy-mm-dd string for date inputs. */
|
||||
export function todayISO(): string {
|
||||
return new Date().toISOString().slice(0, 10)
|
||||
}
|
||||
|
||||
const toPersianDigits = (input: string): string =>
|
||||
input.replace(/[0-9]/g, (digit) => '۰۱۲۳۴۵۶۷۸۹'[Number(digit)])
|
||||
|
||||
export function toFa(value: string | number): string {
|
||||
return toPersianDigits(String(value))
|
||||
}
|
||||
Reference in New Issue
Block a user