export class Formatter{ static numberFormat(num:number,format:string):string{ let integerPart = Math.floor(Math.abs(num)).toString(); let fractionPart = Math.abs(num).toString().split('.')[1] || ''; let isNegative = num < 0; let isPercent = format.includes('%'); // % if (isPercent) { num *= 100; integerPart = Math.floor(Math.abs(num)).toString(); fractionPart = Math.abs(num).toString().split('.')[1] || ''; } // 小数と整数部分の処理 let [integerFormat, fractionFormat] = format.split('.'); integerPart = integerFormat ? integerPart.padStart(integerFormat.replace(/[^0]/g, '').length, '0') : integerPart; fractionPart = fractionPart.padEnd(fractionFormat ? fractionFormat.length : 0, '0'); // カマ区切 if (/,/.test(integerFormat)) { const parts = []; while (integerPart.length) { parts.unshift(integerPart.slice(-3)); integerPart = integerPart.slice(0, -3); } integerPart = parts.join(','); } // すべて組合わせ let result = fractionFormat ? `${integerPart}.${fractionPart}` : integerPart; result = isNegative ? `-${result}` : result; return isPercent ? `${result}%` : result; } static dateFormat(date: Date, format: string): string { const year = date.getFullYear(); const month = date.getMonth() + 1; const day = date.getDate(); const hour = date.getHours(); const minute = date.getMinutes(); const second = date.getSeconds(); const millisecond = date.getMilliseconds(); const timeZoneOffset = -date.getTimezoneOffset() / 60; const replacements = { 'yyyy': year.toString(), 'yy': year.toString().slice(-2), 'MM': month.toString().padStart(2, '0'), 'M': month.toString(), 'dd': day.toString().padStart(2, '0'), 'd': day.toString(), 'HH': hour.toString().padStart(2, '0'), 'H': hour.toString(), 'hh': (hour > 12 ? hour - 12 : hour).toString().padStart(2, '0'), 'h': (hour > 12 ? hour - 12 : hour).toString(), 'mm': minute.toString().padStart(2, '0'), 'm': minute.toString(), 'ss': second.toString().padStart(2, '0'), 's': second.toString(), 'fff': millisecond.toString().padStart(3, '0'), 'zzz': (timeZoneOffset >= 0 ? '+' : '-') + Math.abs(timeZoneOffset).toString().padStart(2, '0') + ':00' }; return format.replace(/yyyy|yy|MM|M|dd|d|HH|H|hh|h|mm|m|ss|s|fff|zzz/g, (match) => { return replacements[match as keyof typeof replacements] || match; }); } }