87 lines
2.3 KiB
JavaScript
87 lines
2.3 KiB
JavaScript
/* ===========================================================
|
||
📦 src/utils/formatters.js
|
||
Tarih, para, sayı, yüzde formatlama yardımcıları
|
||
=========================================================== */
|
||
|
||
/**
|
||
* 📅 formatDateInput(value)
|
||
* SQL veya ISO datetime'i "yyyy-MM-dd" formatına çevirir.
|
||
* <input type="date"> için uygundur.
|
||
* Örnek: "2025-11-07 00:00:00" → "2025-11-07"
|
||
*/
|
||
export function formatDateInput(value) {
|
||
if (!value) return ''
|
||
try {
|
||
if (typeof value === 'string') {
|
||
// "2025-11-07 00:00:00" → "2025-11-07"
|
||
if (value.includes(' ')) return value.split(' ')[0]
|
||
// "2025-11-07T00:00:00Z" → "2025-11-07"
|
||
if (value.includes('T')) return value.split('T')[0]
|
||
// zaten yyyy-MM-dd ise aynen dön
|
||
if (/^\d{4}-\d{2}-\d{2}$/.test(value)) return value
|
||
}
|
||
if (value instanceof Date) {
|
||
return value.toISOString().split('T')[0]
|
||
}
|
||
return ''
|
||
} catch {
|
||
return ''
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 📅 formatDateDisplay(value)
|
||
* "2025-10-31" veya "2025-10-31 00:00:00" → "31.10.2025"
|
||
* Sadece ekranda gösterim için.
|
||
*/
|
||
export function formatDateDisplay(value) {
|
||
if (!value) return ''
|
||
try {
|
||
const d = new Date(value)
|
||
if (isNaN(d)) return ''
|
||
const dd = String(d.getDate()).padStart(2, '0')
|
||
const mm = String(d.getMonth() + 1).padStart(2, '0')
|
||
const yyyy = d.getFullYear()
|
||
return `${dd}.${mm}.${yyyy}`
|
||
} catch {
|
||
return ''
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 💰 formatMoney(value, currency)
|
||
* Sayıyı belirtilen para birimiyle biçimlendirir.
|
||
* Varsayılan: TRY
|
||
* Örnek: formatMoney(12500, 'USD')
|
||
*/
|
||
export function formatMoney(value, currency = 'TRY') {
|
||
const n = Number(value || 0)
|
||
return new Intl.NumberFormat('tr-TR', {
|
||
style: 'currency',
|
||
currency,
|
||
minimumFractionDigits: 2,
|
||
maximumFractionDigits: 2,
|
||
}).format(n)
|
||
}
|
||
|
||
/**
|
||
* 🔢 formatNumber(value, fraction)
|
||
* Genel sayı biçimlendirme (küsuratlı veya küsuratsız)
|
||
*/
|
||
export function formatNumber(value, fraction = 2) {
|
||
const n = Number(value || 0)
|
||
return n.toLocaleString('tr-TR', {
|
||
minimumFractionDigits: fraction,
|
||
maximumFractionDigits: fraction,
|
||
})
|
||
}
|
||
|
||
/**
|
||
* 💬 formatPercent(value)
|
||
* 0.1 → "%10.00" şeklinde gösterir
|
||
*/
|
||
export function formatPercent(value) {
|
||
const n = Number(value || 0)
|
||
return `${(n * 100).toFixed(2)}%`
|
||
}
|