Formatlash
Son, so'm, telefon, karta, sana, nisbiy vaqt, davomiylik va fayl hajmini formatlash; son va pulni so'z bilan yozish.
O'zbekistonda odatiy ko'rinishlar standart holatda: 1 250 000 so'm, +998 90 123 45 67,
21 Oktabr 2026, Chorshanba, 5 daqiqa oldin. Funksiyalar Intl va brauzer locale'iga
bog'liq emas — natija serverda ham, har qanday brauzerda ham bir xil. Noto'g'ri kirishda xato
otilmaydi, bo'sh satr '' qaytadi.
import {
formatNumber,
formatMoney,
formatPhone,
formatCardNumber,
formatDate,
parseDate,
timeAgo,
formatFileSize,
numberToWords,
moneyToWords,
ordinal,
ordinalWords,
formatDateUz,
formatDateRange,
formatDuration,
} from '@akhatmirzo/core';Son va pul
- formatNumber(n)
- 1 250 000.5
- formatNumber(n, { decimals: 2 })
- 1 250 000.50
- formatMoney(n, { currency })
- 1 250 001 so'm
'use client';
import { formatMoney, formatNumber, type MoneyCurrency } from '@akhatmirzo/core';
import { Button, Field, Input } from '@akhatmirzo/ui';
import { useState } from 'react';
const CURRENCIES: MoneyCurrency[] = ["so'm", 'UZS', false];
export default function CoreMoney() {
const [raw, setRaw] = useState('1250000.5');
const [currency, setCurrency] = useState<MoneyCurrency>("so'm");
const n = Number(raw.replace(',', '.').replace(/\s/g, ''));
const rows = [
{ call: 'formatNumber(n)', value: formatNumber(n) },
{ call: 'formatNumber(n, { decimals: 2 })', value: formatNumber(n, { decimals: 2 }) },
{ call: 'formatMoney(n, { currency })', value: formatMoney(n, { currency }) },
];
return (
<div className="flex w-full max-w-md flex-col gap-4">
<Field label="Son">
<Input value={raw} onChange={(e) => setRaw(e.target.value)} inputMode="decimal" />
</Field>
<div className="flex flex-wrap items-center gap-2">
{CURRENCIES.map((c) => (
<Button
key={String(c)}
size="sm"
variant={currency === c ? 'primary' : 'outline'}
onClick={() => setCurrency(c)}
>
{c === false ? 'false' : c}
</Button>
))}
</div>
<dl className="divide-y divide-border rounded-xl border border-border bg-surface text-sm">
{rows.map((row) => (
<div key={row.call} className="flex flex-wrap justify-between gap-x-4 gap-y-1 px-3 py-2">
<dt className="font-mono text-xs text-text-muted">{row.call}</dt>
<dd className="font-mono font-medium text-text tabular-nums">{row.value || "''"}</dd>
</div>
))}
</dl>
</div>
);
}
formatNumber
function formatNumber(n: number, options?: FormatNumberOptions): string;Sonni minglik ajratuvchi bilan yozadi. Ajratuvchi — oddiy bo'sh joy (NBSP emas), shuning uchun
natijani nusxalab boshqa joyga qo'yish oson. NaN va Infinity → ''.
formatNumber(1250000); // '1 250 000'
formatNumber(1250000.756); // '1 250 000.756'
formatNumber(1250000.5, { decimals: 2 }); // '1 250 000.50'
formatNumber(1234567.891, { separator: ',', decimals: 2 }); // '1,234,567.89'
formatNumber(1234567.5, { decimalMark: ',', decimals: 1 }); // '1 234 567,5'
formatNumber(-4500); // '-4 500'
formatNumber(NaN); // ''| Prop | Tip | Standart | Tavsif |
|---|---|---|---|
decimals | number | — | Kasr qismidagi raqamlar (0–20). Berilmasa — son qanday bo'lsa, shunday |
separator | string | ' ' | Minglik ajratuvchi |
decimalMark | string | '.' | Kasr ajratuvchisi |
formatMoney
function formatMoney(n: number, options?: FormatMoneyOptions): string;Pul summasi. Standart holatda butun songa yaxlitlanadi va so'm qo'shiladi.
formatMoney(1250000); // "1 250 000 so'm"
formatMoney(1249999.6); // "1 250 000 so'm"
formatMoney(99.5, { currency: 'UZS', decimals: 2 }); // '99.50 UZS'
formatMoney(1250000, { currency: false }); // '1 250 000'
formatMoney(-99.5, { decimals: 2 }); // "-99.50 so'm"| Prop | Tip | Standart | Tavsif |
|---|---|---|---|
currency | "so'm" | 'UZS' | false | "so'm" | Valyuta belgisi; false — belgisiz |
decimals | number | 0 | Kasr qismidagi raqamlar |
separator | string | ' ' | Minglik ajratuvchi |
decimalMark | string | '.' | Kasr ajratuvchisi |
Kiritish maydoni kerakmi?
Foydalanuvchi summa yozadigan joyda MoneyInput ishlating — u
yozish paytida formatlaydi va toza son qaytaradi.
formatFileSize
function formatFileSize(bytes: number, decimals?: number): string;Fayl hajmini o'qiladigan ko'rinishga keltiradi: B, KB, MB, GB, TB (1 KB = 1024 B).
Ortiqcha nollar tashlanadi. Manfiy yoki noto'g'ri qiymat → ''.
formatFileSize(512); // '512 B'
formatFileSize(1024); // '1 KB'
formatFileSize(1536); // '1.5 KB'
formatFileSize(3565158); // '3.4 MB'
formatFileSize(3565158, 0); // '3 MB'
formatFileSize(-1); // ''decimals — kasr qismidagi raqamlar soni, standart 1.
Telefon va karta
Ikkala funksiya ham bosqichma-bosqich formatlaydi — to'liq bo'lmagan raqamni ham. Shuning
uchun ularni yozish paytida, onChange ichida chaqirish mumkin:
formatPhone: +998 90 123
Toza qiymat: 86001234
'use client';
import { formatCardNumber, formatPhone } from '@akhatmirzo/core';
import { Field, Input } from '@akhatmirzo/ui';
import { useState } from 'react';
const digitsOf = (s: string) => s.replace(/\D/g, '');
export default function CorePhoneCard() {
const [phone, setPhone] = useState('90123');
const [card, setCard] = useState('8600 1234');
return (
<div className="flex w-full max-w-sm flex-col gap-4">
<Field label="Telefon" description={`formatPhone: ${formatPhone(phone) || '—'}`}>
<Input
prefix="+998"
value={formatPhone(phone, 'national')}
onChange={(e) => setPhone(digitsOf(e.target.value).slice(0, 9))}
inputMode="tel"
placeholder="(90) 123-45-67"
/>
</Field>
<Field label="Karta raqami" description={`Toza qiymat: ${digitsOf(card) || '—'}`}>
<Input
value={card}
onChange={(e) => setCard(formatCardNumber(digitsOf(e.target.value).slice(0, 16)))}
inputMode="numeric"
placeholder="0000 0000 0000 0000"
/>
</Field>
</div>
);
}
formatPhone
function formatPhone(input: string | number | null | undefined, style?: PhoneStyle): string;
// PhoneStyle = 'international' | 'national'O'zbekiston raqamini formatlaydi. Bo'shliq, chiziqcha va qavslar e'tiborsiz qoldiriladi.
formatPhone('901234567'); // '+998 90 123 45 67'
formatPhone(901234567); // '+998 90 123 45 67'
formatPhone('+998 (90) 123-45-67'); // '+998 90 123 45 67'
formatPhone('+998901234567', 'national'); // '(90) 123-45-67'
formatPhone('90123', 'national'); // '(90) 123'
formatPhone(''); // ''998 prefiksi qachon olib tashlanadi
998 faqat + bilan yoki 9 tadan ko'p raqam berilganda davlat kodi deb hisoblanadi. Aks holda u
milliy raqamning boshi: formatPhone('998123456') → '+998 99 812 34 56' (operator 99).
formatCardNumber
function formatCardNumber(input: string | number | null | undefined): string;Karta raqamini 4 tadan guruhlaydi, ko'pi bilan 19 raqam.
formatCardNumber('8600123412341234'); // '8600 1234 1234 1234'
formatCardNumber('8600-1234-12'); // '8600 1234 12'Raqam to'g'riligini tekshirish uchun — isValidCardNumber.
Sana va vaqt
formatDate(sana, shablon) → 21 Oktabr 2026, Chorshanba
null — bunday sana yo'q
'use client';
import { formatDate, parseDate } from '@akhatmirzo/core';
import { Badge, Field, Input } from '@akhatmirzo/ui';
import { useState } from 'react';
const PATTERNS = ['dd.MM.yyyy', 'd MMMM yyyy, EEEE', 'd MMM, EEE', 'EEEE, d MMMM [soat] HH:mm'];
const DATE = new Date(2026, 9, 21, 14, 30);
export default function CoreDate() {
const [pattern, setPattern] = useState('d MMMM yyyy, EEEE');
const [input, setInput] = useState('31.02.2026');
const parsed = parseDate(input);
return (
<div className="flex w-full max-w-md flex-col gap-4">
<Field
label="Shablon"
description={`formatDate(sana, shablon) → ${formatDate(DATE, pattern)}`}
>
<Input value={pattern} onChange={(e) => setPattern(e.target.value)} />
</Field>
<div className="flex flex-wrap gap-2">
{PATTERNS.map((p) => (
<button key={p} type="button" onClick={() => setPattern(p)} className="cursor-pointer">
<Badge variant="outline">{p}</Badge>
</button>
))}
</div>
<Field
label="parseDate (dd.MM.yyyy)"
description={parsed ? formatDate(parsed, 'EEEE, d MMMM yyyy') : "null — bunday sana yo'q"}
>
<Input value={input} onChange={(e) => setInput(e.target.value)} invalid={!parsed} />
</Field>
</div>
);
}
formatDate
function formatDate(date: DateInput, pattern?: string): string;
// DateInput = Date | number | string | null | undefinedSanani shablon bo'yicha formatlaydi (mahalliy vaqtda). Oy va hafta kunlari o'zbekcha. Standart
shablon — 'dd.MM.yyyy'. Noto'g'ri sana → ''.
const date = new Date(2026, 9, 21, 14, 5);
formatDate(date); // '21.10.2026'
formatDate(date, 'd MMMM yyyy, EEEE'); // '21 Oktabr 2026, Chorshanba'
formatDate(date, 'd MMM, EEE'); // '21 Okt, Ch'
formatDate(date, 'yyyy-MM-dd HH:mm'); // '2026-10-21 14:05'
formatDate(date, 'EEEE, d MMMM [soat] HH:mm'); // 'Chorshanba, 21 Oktabr soat 14:05'
formatDate('sana emas'); // ''Jadvaldagi natijalar new Date(2026, 2, 5, 9, 5, 7) — 5-mart 2026, 09:05:07 uchun:
| Token | Natija | Token | Natija |
|---|---|---|---|
yyyy / yy | 2026 / 26 | HH / H | 09 / 9 (soat) |
MMMM | Mart | mm / m | 05 / 5 (daqiqa) |
MMM | Mar | ss / s | 07 / 7 (soniya) |
MM / M | 03 / 3 | EEEE | Payshanba |
dd / d | 05 / 5 | EEE | Pa |
Kvadrat qavs ichidagi matn o'zgarmaydi: '[soat] HH:mm' → 'soat 14:05'.
parseDate
function parseDate(input: string | null | undefined, pattern?: string): Date | null;Matnni shu shablonlar bo'yicha sanaga aylantiradi (mahalliy vaqt). Shablonga mos kelmasa yoki
bunday sana mavjud bo'lmasa — null. Oy nomlari katta-kichik harfga sezgir emas, yy → 20yy,
chetdagi bo'shliqlar e'tiborsiz.
parseDate('21.10.2026'); // Date: 21-oktabr 2026, 00:00
parseDate('31.02.2026'); // null — 31-fevral yo'q
parseDate('5 oktabr 2026', 'd MMMM yyyy'); // Date: 5-oktabr 2026
parseDate('2026-10-21 14:30', 'yyyy-MM-dd HH:mm'); // Date: 21-oktabr 2026, 14:30
parseDate('21.10.26', 'dd.MM.yy'); // Date: 21-oktabr 2026timeAgo
function timeAgo(date: DateInput, now?: DateInput): string;Nisbiy vaqt: o'tmish uchun "… oldin", kelajak uchun "…dan keyin". Bir daqiqadan kam farq —
"hozirgina", bir sutkagacha — daqiqa yoki soat. Sutkadan ko'p farqda kunlar kalendar bo'yicha
sanaladi: 19-oktabr 23:00 21-oktabr ertalab 08:00 dan qaraganda (33 soat) "2 kun oldin" bo'ladi.
now — taqqoslash nuqtasi, standart new Date().
timeAgo → 1 soat oldin
- 5 daqiqa5 daqiqa oldin
- 180 daqiqa3 soat oldin
- 1440 daqiqakecha
- 4320 daqiqa3 kun oldin
- 20160 daqiqa2 hafta oldin
- 136800 daqiqa3 oy oldin
- -120 daqiqa2 soatdan keyin
- -1440 daqiqaertaga
'use client';
import { timeAgo } from '@akhatmirzo/core';
import { Field, Input } from '@akhatmirzo/ui';
import { useState } from 'react';
const MINUTE = 60_000;
const NOW = new Date(2026, 9, 21, 12, 0);
const OFFSETS = [5, 180, 1440, 4320, 20160, 136800, -120, -1440];
export default function CoreTimeAgo() {
const [minutes, setMinutes] = useState('90');
const custom = new Date(NOW.getTime() - Number(minutes || 0) * MINUTE);
return (
<div className="flex w-full max-w-sm flex-col gap-4">
<Field label="Necha daqiqa oldin" description={`timeAgo → ${timeAgo(custom, NOW)}`}>
<Input
value={minutes}
onChange={(e) => setMinutes(e.target.value.replace(/[^\d-]/g, ''))}
inputMode="numeric"
suffix="daqiqa"
/>
</Field>
<ul className="divide-y divide-border rounded-xl border border-border bg-surface text-sm">
{OFFSETS.map((m) => (
<li key={m} className="flex justify-between gap-4 px-3 py-2">
<span className="font-mono text-xs text-text-muted">{m} daqiqa</span>
<span className="text-text">{timeAgo(NOW.getTime() - m * MINUTE, NOW)}</span>
</li>
))}
</ul>
</div>
);
}
const now = new Date(2026, 9, 21, 12, 0);
const minutes = (m: number) => new Date(now.getTime() - m * 60_000);
timeAgo(minutes(0.5), now); // 'hozirgina'
timeAgo(minutes(5), now); // '5 daqiqa oldin'
timeAgo(minutes(180), now); // '3 soat oldin'
timeAgo(minutes(1440), now); // 'kecha'
timeAgo(minutes(4320), now); // '3 kun oldin'
timeAgo(minutes(20160), now); // '2 hafta oldin'
timeAgo(minutes(-120), now); // '2 soatdan keyin'
timeAgo(minutes(-1440), now); // 'ertaga'Birliklar: daqiqa, soat, kun, hafta, oy va yil.
Oy va hafta kunlari
const MONTHS_UZ: readonly ['Yanvar', 'Fevral', …, 'Dekabr'];
const MONTHS_UZ_SHORT: readonly ['Yan', 'Fev', 'Mar', 'Apr', 'May', 'Iyn', 'Iyl', …];
const WEEKDAYS_UZ: readonly ['Dushanba', 'Seshanba', …, 'Yakshanba'];
const WEEKDAYS_UZ_SHORT: readonly ['Du', 'Se', 'Ch', 'Pa', 'Ju', 'Sh', 'Ya'];
function weekdayIndex(date: Date): number; // 0 = Dushanba … 6 = YakshanbaHafta dushanbadan boshlanadi. JavaScript'ning getDay() esa yakshanbadan sanaydi, shuning
uchun indeksni weekdayIndex bilan oling:
WEEKDAYS_UZ[weekdayIndex(new Date(2026, 9, 21))]; // 'Chorshanba'
weekdayIndex(new Date(2026, 9, 25)); // 6 — yakshanbaQisqa oy nomlarida Iyun va Iyul Iyn / Iyl — bir-biridan farqlanishi uchun.
Son va pul so'z bilan
Hisob-faktura, shartnoma va cheklar uchun — son va summani o'zbekcha so'z bilan yozish.
- numberToWords
- bir million ikki yuz ellik ming
- moneyToWords
- Bir million ikki yuz ellik ming soʻm 50 tiyin
- ordinalWords
- bir million ikki yuz ellik minginchi
'use client';
import { moneyToWords, numberToWords, ordinalWords } from '@akhatmirzo/core';
import { Field, Input, SegmentedControl } from '@akhatmirzo/ui';
import { useState } from 'react';
type Script = 'latin' | 'cyrillic';
export default function CoreNumberWords() {
const [raw, setRaw] = useState('1250000.50');
const [script, setScript] = useState<Script>('latin');
const n = Number(raw.replace(',', '.').replace(/\s/g, ''));
return (
<div className="flex w-full max-w-md flex-col gap-4">
<Field label="Summa">
<Input value={raw} onChange={(e) => setRaw(e.target.value)} inputMode="decimal" />
</Field>
<SegmentedControl
aria-label="Alifbo"
value={script}
onValueChange={(v) => setScript(v as Script)}
>
<SegmentedControl.Item value="latin">Lotin</SegmentedControl.Item>
<SegmentedControl.Item value="cyrillic">Кирилл</SegmentedControl.Item>
</SegmentedControl>
<dl className="grid gap-2 text-sm">
<dt className="font-mono text-xs text-text-muted">numberToWords</dt>
<dd>{numberToWords(n, { script }) || '—'}</dd>
<dt className="font-mono text-xs text-text-muted">moneyToWords</dt>
<dd>{moneyToWords(n, { script }) || '—'}</dd>
<dt className="font-mono text-xs text-text-muted">ordinalWords</dt>
<dd>{ordinalWords(n, { script }) || '—'}</dd>
</dl>
</div>
);
}
Alifbo va apostrof
Matn qaytaradigan barcha yangi funksiyalar script: 'latin' | 'cyrillic' opsiyasini oladi
(standart 'latin', kirill — latToCyr orqali). Lotin natijada tipografik oʻ gʻ
(U+02BB) ishlatiladi; apostrophe: 'ascii' bilan — oddiy '.
numberToWords
function numberToWords(n: number, options?: NumberToWordsOptions): string;Butun son, ±999 999 999 999 999 gacha (trillion). Kasr qismi tashlanadi, manfiy son —
"minus …". NaN, Infinity va chegaradan tashqari son → ''.
numberToWords(0); // 'nol'
numberToWords(21); // 'yigirma bir'
numberToWords(101); // 'yuz bir'
numberToWords(1001); // 'ming bir'
numberToWords(1_250_000); // 'bir million ikki yuz ellik ming'
numberToWords(2_300_000_000); // 'ikki milliard uch yuz million'
numberToWords(-15); // 'minus oʻn besh'
numberToWords(3.99); // 'uch'
numberToWords(1100, { formal: true }); // 'bir ming bir yuz'
numberToWords(14, { apostrophe: 'ascii' }); // "o'n to'rt"
numberToWords(1_250_000, { script: 'cyrillic' }); // 'бир миллион икки юз эллик минг'Standart uslubda 100 — "yuz", 1000 — "ming" (faqat son ming bilan boshlanganda:
1 001 000 → "bir million bir ming"). formal: true — rasmiy hujjatlar uslubi: "bir yuz",
"bir ming".
| Prop | Tip | Standart | Tavsif |
|---|---|---|---|
formal | boolean | false | "bir yuz", "bir ming" (rasmiy uslub) |
script | 'latin' | 'cyrillic' | 'latin' | Alifbo |
apostrophe | 'typographic' | 'ascii' | 'typographic' | oʻ gʻ dagi belgi: ʻ yoki ' |
moneyToWords
function moneyToWords(amount: number, options?: MoneyToWordsOptions): string;Summani so'z bilan yozadi: birinchi harf katta, tiyin raqam bilan (hisob-faktura uslubi). Kasr qismi
2 raqamga yaxlitlanadi; 0 tiyin yozilmaydi. numberToWords opsiyalarini ham qabul qiladi.
moneyToWords(1_250_000.5); // 'Bir million ikki yuz ellik ming soʻm 50 tiyin'
moneyToWords(1_250_000); // 'Bir million ikki yuz ellik ming soʻm'
moneyToWords(10.25, { tiyin: 'words' }); // 'Oʻn soʻm yigirma besh tiyin'
moneyToWords(10.25, { tiyin: false }); // 'Oʻn soʻm'
moneyToWords(2500, { capitalize: false }); // 'ikki ming besh yuz soʻm'
moneyToWords(2500, { currency: 'UZS' }); // 'Ikki ming besh yuz UZS'
moneyToWords(100_000, { formal: true }); // 'Bir yuz ming soʻm'
moneyToWords(1000, { script: 'cyrillic' }); // 'Минг сўм'| Prop | Tip | Standart | Tavsif |
|---|---|---|---|
currency | "so'm" | 'UZS' | string | "so'm" | "so'm" — so'z bilan (soʻm / сўм); boshqa satr o'zgarishsiz qo'shiladi |
tiyin | 'digits' | 'words' | false | 'digits' | "50 tiyin", "ellik tiyin" yoki yozilmaydi |
capitalize | boolean | true | Birinchi harf katta |
formal | boolean | false | "bir yuz", "bir ming" |
script | 'latin' | 'cyrillic' | 'latin' | Alifbo |
apostrophe | 'typographic' | 'ascii' | 'typographic' | oʻ gʻ dagi belgi: ʻ yoki ' |
ordinal va ordinalWords
function ordinal(n: number): string;
function ordinalWords(n: number, options?: UzScriptOptions): string;Tartib son. ordinal — raqam va defis (22-oktabr, 3-sinf). ordinalWords — so'z bilan: oxirgi
so'z unli bilan tugasa -nchi, aks holda -inchi qo'shiladi; qo'shma sonlarda qo'shimcha oxirgi
so'zga qo'shiladi. Manfiy yoki noto'g'ri son → ''.
ordinal(3); // '3-'
ordinalWords(1); // 'birinchi'
ordinalWords(2); // 'ikkinchi'
ordinalWords(4); // 'toʻrtinchi'
ordinalWords(20); // 'yigirmanchi'
ordinalWords(21); // 'yigirma birinchi'
ordinalWords(1000); // 'minginchi'
ordinalWords(2, { script: 'cyrillic' }); // 'иккинчи'O'zbekcha sana va davomiylik
O'zbek imlosi bo'yicha: oy nomlari kichik harf bilan, kun va yil defis bilan — 22-oktabr,
2026-yil. Mavjud formatDate va MONTHS_UZ o'zgarmaydi (bosh harfli nomlar saqlanadi).
- long
- 22-oktabr, 2026-yil
- full
- 2026-yil 22-oktabr, payshanba
- short
- 22-okt, 2026
- dayMonth
- 22-oktabr
- monthYear
- oktabr, 2026-yil
- kirill
- 2026-йил 22-октябрь, пайшанба
- +3 kun
- 22–25-oktabr, 2026-yil
- davomiylik
- 2 kun 9 soat 30 daqiqa
'use client';
import { formatDateRange, formatDateUz, formatDuration } from '@akhatmirzo/core';
import { Field, Input } from '@akhatmirzo/ui';
import { useState } from 'react';
const STYLES = ['long', 'full', 'short', 'dayMonth', 'monthYear'] as const;
export default function CoreDateUz() {
const [value, setValue] = useState('2026-10-22');
const [y = 2026, m = 10, d = 22] = value.split('-').map(Number);
const date = new Date(y, m - 1, d, 14, 30);
const end = new Date(y, m - 1, d + 3);
return (
<div className="flex w-full max-w-md flex-col gap-4">
<Field label="Sana">
<Input type="date" value={value} onChange={(e) => setValue(e.target.value)} />
</Field>
<dl className="grid grid-cols-[auto_1fr] gap-x-4 gap-y-2 text-sm">
{STYLES.map((style) => (
<div key={style} className="contents">
<dt className="font-mono text-xs text-text-muted">{style}</dt>
<dd>{formatDateUz(date, { style })}</dd>
</div>
))}
<dt className="font-mono text-xs text-text-muted">kirill</dt>
<dd>{formatDateUz(date, { style: 'full', script: 'cyrillic' })}</dd>
<dt className="font-mono text-xs text-text-muted">+3 kun</dt>
<dd>{formatDateRange(date, end)}</dd>
<dt className="font-mono text-xs text-text-muted">davomiylik</dt>
<dd>{formatDuration(end.getTime() - date.getTime(), { units: 3 })}</dd>
</dl>
</div>
);
}
formatDateUz
function formatDateUz(date: DateInput, options?: FormatDateUzOptions): string;Tayyor uslublar — shablon yozish shart emas. Noto'g'ri sana → ''.
const d = new Date(2026, 9, 22, 14, 30);
formatDateUz(d); // '22-oktabr, 2026-yil'
formatDateUz(d, { style: 'full' }); // '2026-yil 22-oktabr, payshanba'
formatDateUz(d, { style: 'short' }); // '22-okt, 2026'
formatDateUz(d, { style: 'dayMonth' }); // '22-oktabr'
formatDateUz(d, { style: 'monthYear' }); // 'oktabr, 2026-yil'
formatDateUz(d, { time: true }); // '22-oktabr, 2026-yil, 14:30'
formatDateUz(d, { script: 'cyrillic' }); // '22-октябрь, 2026-йил'Kirill oy nomlari imlodagi shaklda: январь … июнь, июль … декабрь.
| Prop | Tip | Standart | Tavsif |
|---|---|---|---|
style | 'long' | 'full' | 'short' | 'dayMonth' | 'monthYear' | 'long' | Natija ko'rinishi |
time | boolean | false | Oxiriga ", HH:mm" |
script | 'latin' | 'cyrillic' | 'latin' | Alifbo |
formatDateRange
function formatDateRange(
start: DateInput,
end: DateInput,
options?: FormatDateRangeOptions,
): string;Sanalar oralig'i, takrorlarsiz. Bir kun bo'lsa — bitta sana; start > end bo'lsa o'rni
almashtiriladi. Opsiyalar: style: 'long' | 'short', script.
formatDateRange(new Date(2026, 9, 20), new Date(2026, 9, 22)); // '20–22-oktabr, 2026-yil'
formatDateRange(new Date(2026, 8, 30), new Date(2026, 9, 2)); // '30-sentabr – 2-oktabr, 2026-yil'
formatDateRange(new Date(2026, 11, 30), new Date(2027, 0, 2));
// '30-dekabr, 2026-yil – 2-yanvar, 2027-yil'
formatDateRange(new Date(2026, 9, 20), new Date(2026, 9, 22), { style: 'short' });
// '20–22-okt, 2026'formatDuration
function formatDuration(ms: number, options?: FormatDurationOptions): string;Davomiylik (millisoniyada). Birliklar: kun, soat, daqiqa, soniya. Eng katta noldan farqli birlikdan
boshlab units ta ketma-ket birlik olinadi, nol qiymatlilari tashlanadi; qoldiq kesiladi
(yaxlitlanmaydi). < 1 s → '0 soniya', manfiy yoki noto'g'ri son → ''.
formatDuration(8_100_000); // '2 soat 15 daqiqa'
formatDuration(90_061_000); // '1 kun 1 soat'
formatDuration(90_061_000, { units: 3 }); // '1 kun 1 soat 1 daqiqa'
formatDuration(45_000, { style: 'short' }); // '45 s'
formatDuration(8_100_000, { style: 'short' }); // '2 soat 15 daq'
formatDuration(500); // '0 soniya'
formatDuration(8_100_000, { script: 'cyrillic' }); // '2 соат 15 дақиқа'| Prop | Tip | Standart | Tavsif |
|---|---|---|---|
units | number | 2 | Nechta birlik (1–4) |
style | 'long' | 'short' | 'long' | short: kun, soat, daq, s |
script | 'latin' | 'cyrillic' | 'latin' | Alifbo |