<!DOCTYPE html>
<html>
<head>
	<title>Cron解析器</title>
</head>
<body>
	<h1>Cron解析器</h1>
	<h2>功能1:解析corn表达式</h2>
	<label for="cronExpression">请输入6位格式的corn表达式:</label>
	<input type="text" id="cronExpression" placeholder="例如:0 0 12 * * *">
	<br><br>
	<button onclick="parseCronExpression()">输出</button>
	<br><br>
	<p id="output"></p>
	<h2>功能2:生成corn表达式</h2>
	<label>请选择怎么运行的选项:</label>
	<br><br>
	<input type="checkbox" id="second" onchange="generateCronExpression()">秒
	<input type="checkbox" id="minute" onchange="generateCronExpression()">分
	<input type="checkbox" id="hour" onchange="generateCronExpression()">小时
	<input type="checkbox" id="day" onchange="generateCronExpression()">天
	<input type="checkbox" id="month" onchange="generateCronExpression()">月
	<input type="checkbox" id="week" onchange="generateCronExpression()">周
	<br><br>
	<p id="cronExpressionOutput"></p>
	<script>
		function parseCronExpression() {
			let cronExpression = document.getElementById("cronExpression").value;
			let output = document.getElementById("output");
			let nextDates = getNextDates(cronExpression);
			if (nextDates.length > 0) {
				let outputString = "下次运行时间:";
				for (let i = 0; i < nextDates.length; i++) {
					outputString += nextDates[i].toLocaleString() + ", ";
				}
				outputString = outputString.slice(0, -2) + ".";
				output.textContent = outputString;
			} else {
				output.textContent = "无效的corn表达式。";
			}
		}
<pre><code>	function getNextDates(cronExpression) {
		let fields = cronExpression.split(&quot; &quot;);
		if (fields.length !== 6) {
			return [];
		}

		let currentDate = new Date();
		let nextDates = [];

		let second = fields[0];
		let minute = fields[1];
		let hour = fields[2];
		let dayOfMonth = fields[3];
		let month = fields[4];
		let dayOfWeek = fields[5];

		let cronDate = new Date(currentDate.getFullYear(), parseInt(month) - 1, parseInt(dayOfMonth), parseInt(hour), parseInt(minute), parseInt(second));

		if (cronDate &lt; currentDate) {
			cronDate.setFullYear(cronDate.getFullYear() + 1);
		}

		while (cronDate &lt;= currentDate) {
			switch (dayOfWeek) {
				case &quot;*&quot;:
					break;
				case &quot;0&quot;:
					if (cronDate.getDay() !== 0) {
						cronDate.setDate(cronDate.getDate() + 7 - cronDate.getDay());
					}
					break;
				case &quot;1&quot;:
					if (cronDate.getDay() !== 1) {
						cronDate.setDate(cronDate.getDate() + (cronDate.getDay() === 0 ? 1 : 8 - cronDate.getDay()));
					}
					break;
				case &quot;2&quot;:
					if (cronDate.getDay() !== 2) {
						cronDate.setDate(cronDate.getDate() + (cronDate.getDay() &lt;= 2 ? 2 - cronDate.getDay() : 9 - cronDate.getDay()));
					}
					break;
				case &quot;3&quot;:
					if (cronDate.getDay() !== 3) {
						cronDate.setDate(cronDate.getDate() + (cronDate.getDay() &lt;= 3 ? 3 - cronDate.getDay() : 10 - cronDate.getDay()));
					}
					break;
				case &quot;4&quot;:
					if (cronDate.getDay() !== 4) {
						cronDate.setDate(cronDate.getDate() + (cronDate.getDay() &lt;= 4 ? 4 - cronDate.getDay() : 11 - cronDate.getDay()));
					}
					break;
				case &quot;5&quot;:
					if (cronDate.getDay() !== 5) {
						cronDate.setDate(cronDate.getDate() + (cronDate.getDay() &lt;= 5 ? 5 - cronDate.getDay() : 12 - cronDate.getDay()));
					}
					break;
				case &quot;6&quot;:
					if (cronDate.getDay() !== 6) {
						cronDate.setDate(cronDate.getDate() + (cronDate.getDay() &lt;= 6 ? 6 - cronDate.getDay() : 13 - cronDate.getDay()));
					}
					break;
			}

			if (cronDate &lt;= currentDate) {
				nextDates.push(new Date(cronDate.getTime()));
			}

			switch (month) {
				case &quot;*&quot;:
					cronDate.setMonth(cronDate.getMonth() + 1);
					break;
				case &quot;1&quot;:
				case &quot;2&quot;:
				case &quot;3&quot;:
				case &quot;4&quot;:
				case &quot;5&quot;:
				case &quot;6&quot;:
				case &quot;7&quot;:
				case &quot;8&quot;:
				case &quot;9&quot;:
				case &quot;10&quot;:
				case &quot;11&quot;:
					if (cronDate.getMonth() !== parseInt(month) - 1) {
						cronDate.setMonth(parseInt(month) - 1);
					} else {
						cronDate.setMonth(parseInt(month));
					}
					break;
				case &quot;12&quot;:
					if (cronDate.getMonth() !== 11) {
						cronDate.setMonth(11);
					} else {
						cronDate.setFullYear(cronDate.getFullYear() + 1);
						cronDate.setMonth(0);
					}
					break;
			}

			if (cronDate &lt;= currentDate) {
				switch (dayOfMonth) {
					case &quot;*&quot;:
						cronDate.setDate(1);
						cronDate.setMonth(cronDate.getMonth() + 1);
						break;
					case &quot;1&quot;:
					case &quot;2&quot;:
					case &quot;3&quot;:
					case &quot;4&quot;:
					case &quot;5&quot;:
					case &quot;6&quot;:
					case &quot;7&quot;:
					case &quot;8&quot;:
					case &quot;9&quot;:
					case &quot;10&quot;:
					case &quot;11&quot;:
					case &quot;12&quot;:
					case &quot;13&quot;:
					case &quot;14&quot;:
					case &quot;15&quot;:
					case &quot;16&quot;:
					case &quot;17&quot;:
					case &quot;18&quot;:
					case &quot;19&quot;:
					case &quot;20&quot;:
					case &quot;21&quot;:
					case &quot;22&quot;:
					case &quot;23&quot;:
					case &quot;24&quot;:
					case &quot;25&quot;:
					case &quot;26&quot;:
					case &quot;27&quot;:
					case &quot;28&quot;:
					case &quot;29&quot;:
					case &quot;30&quot;:
						if (cronDate.getDate() !== parseInt(dayOfMonth)) {
							cronDate.setDate(parseInt(dayOfMonth));
						} else {
							cronDate.setMonth(cronDate.getMonth() + 1);
						}
						break;
					case &quot;31&quot;:
						if (cronDate.getDate() !== 31) {
							cronDate.setDate(31);
						} else {
							cronDate.setMonth(cronDate.getMonth() + 1);
						}
						break;
				}
			}
		}

		return nextDates;
	}

	function generateCronExpression() {
		let cronExpressionOutput = document.getElementById(&quot;cronExpressionOutput&quot;);

		let second = document.getElementById(&quot;second&quot;).checked ? &quot;*&quot; : &quot;0&quot;;
		let minute = document.getElementById(&quot;minute&quot;).checked ? &quot;*&quot; : &quot;0&quot;;
		let hour = document.getElementById(&quot;hour&quot;).checked ? &quot;*&quot; : &quot;0&quot;;
		let day = document.getElementById(&quot;day&quot;).checked ? &quot;*&quot; : &quot;1&quot;;
		let month = document.getElementById(&quot;month&quot;).checked ? &quot;*&quot; : &quot;1&quot;;
		let week = document.getElementById(&quot;week&quot;).checked ? &quot;*&quot; : &quot;?&quot;;

		let cronExpression = second + &quot; &quot; + minute + &quot; &quot; + hour + &quot; &quot; + day + &quot; &quot; + month + &quot; &quot; + week;
		cronExpressionOutput.textContent = &quot;生成的corn表达式:&quot; + cronExpression;
	}
&lt;/script&gt;
</code></pre>
</body>
</html>
帮我写一个可以直接运行的html他是corn解析器请用js实现功能1输入6位格式的corn表达式对应秒、分、时、天、月、周点击输出可以输出几个最近会触发运行cron的具体日期格式类似2022-01-02 120201功能2通过勾选具体怎么运行的选项对应秒、分、时、天、月、周然后输出对应的6位格式的corn表达式

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

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