71 lines
2.8 KiB
TypeScript
71 lines
2.8 KiB
TypeScript
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;
|
|
});
|
|
}
|
|
|
|
|
|
|
|
} |