<!DOCTYPE html>
<html>
<head>
	<title>Cron解析器</title>
	<meta charset="utf-8">
	<style>
		table, th, td {
  			border: 1px solid black;
  			border-collapse: collapse;
		}
		th, td {
  			padding: 5px;
		}
	</style>
</head>
<body>
	<h1>Cron解析器</h1>
	<h2>功能1:输入6位格式的cron表达式,输出10个最近会触发运行cron的具体日期</h2>
	<form>
		<label for="cron">请输入cron表达式:</label>
		<input type="text" id="cron" name="cron" pattern="^(\*|[0-5]?\d)(\/[0-5]?\d)?\s+(\*|[0-5]?\d)(\/[0-5]?\d)?\s+(\*|[01]?\d|2[0-3])(\/[01]?\d|2[0-3])?\s+(\*|[0-2]?\d|3[01])(\/[0-2]?\d|3[01])?\s+(\*|1[0-2]|0?[1-9])(\/[01]?\d)?\s+(\*|[0-6])(\/[0-6])?$" required>
		<button type="button" onclick="calculate()">输出</button>
	</form>
	<div id="result"></div>
<pre><code>&lt;h2&gt;功能2:示例cron表达式&lt;/h2&gt;
&lt;table&gt;
	&lt;tr&gt;
		&lt;th&gt;秒&lt;/th&gt;
		&lt;th&gt;分&lt;/th&gt;
		&lt;th&gt;时&lt;/th&gt;
		&lt;th&gt;天&lt;/th&gt;
		&lt;th&gt;月&lt;/th&gt;
		&lt;th&gt;周&lt;/th&gt;
		&lt;th&gt;说明&lt;/th&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;*&lt;/td&gt;
		&lt;td&gt;*&lt;/td&gt;
		&lt;td&gt;*&lt;/td&gt;
		&lt;td&gt;*&lt;/td&gt;
		&lt;td&gt;*&lt;/td&gt;
		&lt;td&gt;*&lt;/td&gt;
		&lt;td&gt;每秒&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;*&lt;/td&gt;
		&lt;td&gt;*&lt;/td&gt;
		&lt;td&gt;*&lt;/td&gt;
		&lt;td&gt;*&lt;/td&gt;
		&lt;td&gt;*&lt;/td&gt;
		&lt;td&gt;0&lt;/td&gt;
		&lt;td&gt;每分&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;*&lt;/td&gt;
		&lt;td&gt;*&lt;/td&gt;
		&lt;td&gt;*&lt;/td&gt;
		&lt;td&gt;*&lt;/td&gt;
		&lt;td&gt;*&lt;/td&gt;
		&lt;td&gt;0&lt;/td&gt;
		&lt;td&gt;每小时&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;*&lt;/td&gt;
		&lt;td&gt;0&lt;/td&gt;
		&lt;td&gt;10&lt;/td&gt;
		&lt;td&gt;*&lt;/td&gt;
		&lt;td&gt;*&lt;/td&gt;
		&lt;td&gt;*&lt;/td&gt;
		&lt;td&gt;每天10点&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;*&lt;/td&gt;
		&lt;td&gt;0&lt;/td&gt;
		&lt;td&gt;10&lt;/td&gt;
		&lt;td&gt;*&lt;/td&gt;
		&lt;td&gt;*&lt;/td&gt;
		&lt;td&gt;1&lt;/td&gt;
		&lt;td&gt;每周一10点&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;*&lt;/td&gt;
		&lt;td&gt;*&lt;/td&gt;
		&lt;td&gt;0&lt;/td&gt;
		&lt;td&gt;1&lt;/td&gt;
		&lt;td&gt;*&lt;/td&gt;
		&lt;td&gt;*&lt;/td&gt;
		&lt;td&gt;每月1号&lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;

&lt;script&gt;
	function calculate() {
		var cron = document.getElementById(&quot;cron&quot;).value.split(&quot; &quot;);
		var now = new Date();
		var dates = [];
		var count = 0;
		var year = now.getFullYear();
		var month = 0;
		var day = 0;
		var hour = 0;
		var minute = 0;
		var second = 0;

		for (var i = 0; i &lt; 10; i++) {
			while (count &lt; 10000) {
				if (cron[5] !== &quot;*&quot; &amp;&amp; cron[5] !== &quot;?&quot;) {
					var nextWeekday = getNextWeekday(year, month, day, cron[5]);
					day = nextWeekday.getDate();
					month = nextWeekday.getMonth();
				} else if (cron[3] !== &quot;*&quot; &amp;&amp; cron[3] !== &quot;?&quot;) {
					var nextDay = getNextDay(year, month, day, cron[3]);
					day = nextDay.getDate();
					month = nextDay.getMonth();
				} else if (cron[2] !== &quot;*&quot; &amp;&amp; cron[2] !== &quot;?&quot;) {
					var nextHour = getNextHour(year, month, day, hour, cron[2]);
					hour = nextHour.getHours();
					day = nextHour.getDate();
					month = nextHour.getMonth();
				} else if (cron[1] !== &quot;*&quot; &amp;&amp; cron[1] !== &quot;?&quot;) {
					var nextMinute = getNextMinute(year, month, day, hour, minute, cron[1]);
					minute = nextMinute.getMinutes();
					hour = nextMinute.getHours();
					day = nextMinute.getDate();
					month = nextMinute.getMonth();
				} else if (cron[0] !== &quot;*&quot; &amp;&amp; cron[0] !== &quot;?&quot;) {
					var nextSecond = getNextSecond(year, month, day, hour, minute, second, cron[0]);
					second = nextSecond.getSeconds();
					minute = nextSecond.getMinutes();
					hour = nextSecond.getHours();
					day = nextSecond.getDate();
					month = nextSecond.getMonth();
				} else {
					var nextMonth = month + 1;
					if (nextMonth &gt; 11) {
						nextMonth = 0;
						year++;
					}
					day = 1;
					month = nextMonth;
					hour = 0;
					minute = 0;
					second = 0;
				}

				if (cron[4] !== &quot;*&quot; &amp;&amp; cron[4] !== &quot;?&quot;) {
					if (month !== parseInt(cron[4]) - 1) {
						continue;
					}
				}

				if (dates.length === 0 || (dates.length &gt; 0 &amp;&amp; getTimeDiff(dates[dates.length - 1], new Date(year, month, day, hour, minute, second)) &gt; 0)) {
					dates.push(new Date(year, month, day, hour, minute, second));
					break;
				}

				count++;
			}
		}

		var result = document.getElementById(&quot;result&quot;);
		result.innerHTML = &quot;&quot;;

		if (dates.length === 0) {
			result.innerHTML = &quot;无法计算出下10个触发时间&quot;;
		} else {
			result.innerHTML = &quot;&lt;h3&gt;下10个触发时间:&lt;/h3&gt;&lt;ul&gt;&quot;;
			for (var i = 0; i &lt; dates.length; i++) {
				result.innerHTML += &quot;&lt;li&gt;&quot; + formatDate(dates[i]) + &quot;&lt;/li&gt;&quot;;
			}
			result.innerHTML += &quot;&lt;/ul&gt;&quot;;
		}
	}

	function getNextWeekday(year, month, day, weekday) {
		var date = new Date(year, month, day);
		var daysToAdd = (7 + parseInt(weekday) - date.getDay()) % 7;
		date.setDate(date.getDate() + daysToAdd);
		return date;
	}

	function getNextDay(year, month, day, targetDay) {
		var date = new Date(year, month, day);
		var daysToAdd = parseInt(targetDay) - date.getDate();
		if (daysToAdd &lt; 0) {
			daysToAdd += getDaysInMonth(year, month);
		}
		date.setDate(date.getDate() + daysToAdd);
		return date;
	}

	function getNextHour(year, month, day, hour, targetHour) {
		var date = new Date(year, month, day, hour);
		var hoursToAdd = parseInt(targetHour) - date.getHours();
		if (hoursToAdd &lt; 0) {
			hoursToAdd += 24;
		}
		date.setHours(date.getHours() + hoursToAdd);
		return date;
	}

	function getNextMinute(year, month, day, hour, minute, targetMinute) {
		var date = new Date(year, month, day, hour, minute);
		var minutesToAdd = parseInt(targetMinute) - date.getMinutes();
		if (minutesToAdd &lt; 0) {
			minutesToAdd += 60;
		}
		date.setMinutes(date.getMinutes() + minutesToAdd);
		return date;
	}

	function getNextSecond(year, month, day, hour, minute, second, targetSecond) {
		var date = new Date(year, month, day, hour, minute, second);
		var secondsToAdd = parseInt(targetSecond) - date.getSeconds();
		if (secondsToAdd &lt; 0) {
			secondsToAdd += 60;
		}
		date.setSeconds(date.getSeconds() + secondsToAdd);
		return date;
	}

	function getDaysInMonth(year, month) {
		return new Date(year, month + 1, 0).getDate();
	}

	function getTimeDiff(date1, date2) {
		return date2.getTime() - date1.getTime();
	}

	function formatDate(date) {
		var year = date.getFullYear();
		var month = addZero(date.getMonth() + 1);
		var day = addZero(date.getDate());
		var hour = addZero(date.getHours());
		var minute = addZero(date.getMinutes());
		var second = addZero(date.getSeconds());
		return year + &quot;-&quot; + month + &quot;-&quot; + day + &quot; &quot; + hour + &quot;:&quot; + minute + &quot;:&quot; + second;
	}

	function addZero(num) {
		if (num &lt; 10) {
			return &quot;0&quot; + num;
		}
		return num;
	}
&lt;/script&gt;
</code></pre>
</body>
</html>
帮我写一个可以直接运行的html他是corn解析器请用js实现功能1输入6位格式的corn表达式对应秒、分、时、天、月、周点击输出可以输出10个最近会触发运行cron的具体日期格式类似2022-01-02 120201功能2用表格列出几个cron示例他也是6位格式的corn表达式对应秒、分、时、天、月、周分别是每秒每分每小时每天10点每周一10点还有每月1号会触发的cron表达式

原文地址: https://www.cveoy.top/t/topic/bpWN 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录