I want to convert a cron expression to return the next run datetime in pure javascript. An example cron expression that runs every hour (0 * * * *) should return the next datetime the cron will execute, in my case I am parsing this know at 18:00 so it should return :
2021-09-20 19:00:00
Below is a javascript function that almost does what i want except it returns this expression (0 * * * *) as convertCronToString('0 * * * *'); returns "Runs at *h00 every day "
but i want a datetime of next run. Any help? with no external plugins? if plugins are preferably one with CDN script tag
function convertCronToString(cronExpression) {
var cron = cronExpression.split(" ");
var minutes = cron[0];
var hours = cron[1];
var dayOfMonth = cron[2];
var month = cron[3];
var dayOfWeek = cron[4];
var cronToString = "Runs at ";
// Formatting time if composed of zeros
if (minutes === "0") minutes = "00";
if (hours === "0") hours = "00";
// If it's not past noon add a zero before the hour to make it look like "04h00" instead of "4h00"
else if (hours.length === 1 && hours !== "*") {
hours = "0" + hours;
}
// Our activities do not allow launching pipelines every minute. It won't be processed.
if (minutes === "*") {
cronToString =
"Unreadable cron format. Cron will be displayed in its raw form: " +
cronExpression;
}
cronToString = cronToString + hours + "h" + minutes + " ";
if (dayOfWeek === "0,6") dayOfWeek = "on weekends";
else if (dayOfWeek === "1-5") dayOfWeek = "on weekdays";
else if (dayOfWeek.length === 1) {
if (dayOfWeek === "*" && dayOfMonth === "*") dayOfWeek = "every day ";
else if (dayOfWeek === "*" && dayOfMonth !== "*") {
cronToString = cronToString + "on the " + dayOfMonth;
if (
dayOfMonth === "1" ||
dayOfMonth === "21" ||
dayOfMonth === "31"
) {
cronToString = cronToString + "st ";
} else if (dayOfMonth === "2" || dayOfMonth === "22") {
cronToString = cronToString + "nd ";
} else if (dayOfMonth === "3" || dayOfMonth === "23") {
cronToString = cronToString + "rd ";
} else {
cronToString = cronToString + "th ";
}
cronToString = cronToString + "day of every month";
return cronToString;
} else if (dayOfWeek !== "*" && dayOfMonth === "*") {
switch (parseInt(dayOfWeek)) {
case 0:
dayOfWeek = "on Sundays";
break;
case 1:
dayOfWeek = "on Mondays";
break;
case 2:
dayOfWeek = "on Tuesdays";
break;
case 3:
dayOfWeek = "on Wednesdays";
break;
case 4:
dayOfWeek = "on Thursdays";
break;
case 5:
dayOfWeek = "on Fridays";
break;
case 6:
dayOfWeek = "on Saturdays";
break;
default:
cronToString =
"Unreadable cron format. Cron will be displayed in its raw form: " +
cronExpression;
return cronToString;
}
}
cronToString = cronToString + dayOfWeek + " ";
}
return cronToString;
} ```