feat: add text and date draw tools
This commit is contained in:
@@ -0,0 +1,19 @@
|
||||
import { describe, expect, it } from 'vitest';
|
||||
import { formatStamp } from './datefmt';
|
||||
|
||||
const d = new Date(2026, 7, 25, 9, 5, 3);
|
||||
|
||||
describe('formatStamp', () => {
|
||||
it('разворачивает все базовые токены', () => {
|
||||
expect(formatStamp(d, 'YYYY-MM-DD hh:mm:ss')).toBe('2026-08-25 09:05:03');
|
||||
});
|
||||
|
||||
it('произвольный текст между токенами сохраняется', () => {
|
||||
expect(formatStamp(d, 'DD.MM.YYYY')).toBe('25.08.2026');
|
||||
expect(formatStamp(d, 'YYYY год, MM месяц')).toBe('2026 год, 08 месяц');
|
||||
});
|
||||
|
||||
it('неизвестные последовательности не трогаются', () => {
|
||||
expect(formatStamp(d, 'YYYYYY MMМ')).toBe('2026YY 08М');
|
||||
});
|
||||
});
|
||||
@@ -0,0 +1,26 @@
|
||||
const PAD2 = (n: number) => String(n).padStart(2, '0');
|
||||
|
||||
/**
|
||||
* Мини-форматтер штампа даты: токены YYYY MM DD hh mm ss заменяются
|
||||
* значениями локального времени, остальные символы остаются как есть.
|
||||
*/
|
||||
export function formatStamp(date: Date, pattern: string): string {
|
||||
return pattern.replace(/YYYY|MM|DD|hh|mm|ss/g, (token) => {
|
||||
switch (token) {
|
||||
case 'YYYY':
|
||||
return String(date.getFullYear());
|
||||
case 'MM':
|
||||
return PAD2(date.getMonth() + 1);
|
||||
case 'DD':
|
||||
return PAD2(date.getDate());
|
||||
case 'hh':
|
||||
return PAD2(date.getHours());
|
||||
case 'mm':
|
||||
return PAD2(date.getMinutes());
|
||||
case 'ss':
|
||||
return PAD2(date.getSeconds());
|
||||
default:
|
||||
return token;
|
||||
}
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user