1

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;
} ```
marc_s
  • 732,580
  • 175
  • 1,330
  • 1,459
user7498826
  • 173
  • 3
  • 9
  • Does this answer your question? [Get next cron job timing in node-cron](https://stackoverflow.com/questions/62572790/get-next-cron-job-timing-in-node-cron) – Core972 Sep 20 '21 at 17:03
  • these require npm install, i cant simply include/link these plugins using script tags example " " I am not allowed do do any installs – user7498826 Sep 20 '21 at 17:08
  • I think you should convert on the server-side with (nodeJS/PHP...) and just show the result on front after. – Core972 Sep 20 '21 at 17:11

0 Answers0