MCPcopy Create free account
hub / github.com/Fibi66/FeiControl / cronToHuman

Function cronToHuman

src/lib/cron-parser.ts:40–115  ·  view source on GitHub ↗
(expr: string)

Source from the content-addressed store, hash-verified

38 * "30 14 1 * *""On day 1 of every month at 2:30 PM"
39 */
40export function cronToHuman(expr: string): string {
41 const parts = parseCron(expr);
42 if (!parts) return 'Invalid cron expression';
43
44 const { minute, hour, dayOfMonth, month, dayOfWeek } = parts;
45
46 // Format time
47 const formatTime = (h: string, m: string): string => {
48 if (h === '*' || m === '*') return '';
49 const hourNum = parseInt(h);
50 const minNum = parseInt(m);
51 const period = hourNum >= 12 ? 'PM' : 'AM';
52 const hour12 = hourNum === 0 ? 12 : hourNum > 12 ? hourNum - 12 : hourNum;
53 return `${hour12}:${minNum.toString().padStart(2, '0')} ${period}`;
54 };
55
56 const time = formatTime(hour, minute);
57
58 // Every minute
59 if (minute === '*' && hour === '*' && dayOfMonth === '*' && month === '*' && dayOfWeek === '*') {
60 return 'Every minute';
61 }
62
63 // Every hour at specific minute
64 if (minute !== '*' && hour === '*' && dayOfMonth === '*' && month === '*' && dayOfWeek === '*') {
65 const minNum = parseInt(minute);
66 if (minNum === 0) return 'Every hour on the hour';
67 return `Every hour at minute ${minute}`;
68 }
69
70 // Specific time every day
71 if (minute !== '*' && hour !== '*' && dayOfMonth === '*' && month === '*' && dayOfWeek === '*') {
72 return `Every day at ${time}`;
73 }
74
75 // Specific weekday
76 if (minute !== '*' && hour !== '*' && dayOfMonth === '*' && month === '*' && dayOfWeek !== '*') {
77 const days = dayOfWeek.split(',').map(d => {
78 const dayNum = parseInt(d);
79 return DAYS_OF_WEEK[dayNum] || d;
80 });
81 if (days.length === 1) {
82 return `Every ${days[0]} at ${time}`;
83 }
84 return `Every ${days.join(', ')} at ${time}`;
85 }
86
87 // Specific day of month
88 if (minute !== '*' && hour !== '*' && dayOfMonth !== '*' && month === '*' && dayOfWeek === '*') {
89 const dayNum = parseInt(dayOfMonth);
90 const suffix = getDaySuffix(dayNum);
91 return `On the ${dayNum}${suffix} of every month at ${time}`;
92 }
93
94 // Specific month and day
95 if (minute !== '*' && hour !== '*' && dayOfMonth !== '*' && month !== '*' && dayOfWeek === '*') {
96 const dayNum = parseInt(dayOfMonth);
97 const monthNum = parseInt(month) - 1;

Callers 1

CronJobModalFunction · 0.90

Calls 3

parseCronFunction · 0.85
formatTimeFunction · 0.85
getDaySuffixFunction · 0.85

Tested by

no test coverage detected