<!DOCTYPE html>
<html>
<head>
	<title>Cron表达式解析器</title>
	<script>
		// 解析Cron表达式
		function parseCron(cron) {
			var parts = cron.split(' ');
			var minute = parts[0];
			var hour = parts[1];
			var dayOfMonth = parts[2];
			var month = parts[3];
			var dayOfWeek = parts[4];
			var year = parts[5];
<pre><code>		var dates = [];

		// 暂时不支持年份
		if (year !== '*') {
			alert('不支持指定年份');
			return;
		}

		// 分别解析分钟、小时、日、月、星期几
		var minutes = parsePart(minute, 0, 59);
		var hours = parsePart(hour, 0, 23);
		var daysOfMonth = parsePart(dayOfMonth, 1, 31);
		var months = parsePart(month, 1, 12);
		var daysOfWeek = parsePart(dayOfWeek, 0, 6);

		// 构造日期并加入到数组中
		for (var i = 0; i &lt; minutes.length; i++) {
			for (var j = 0; j &lt; hours.length; j++) {
				for (var k = 0; k &lt; daysOfMonth.length; k++) {
					for (var l = 0; l &lt; months.length; l++) {
						for (var m = 0; m &lt; daysOfWeek.length; m++) {
							var date = new Date();
							date.setUTCFullYear(year);
							date.setUTCMonth(months[l] - 1);
							date.setUTCDate(daysOfMonth[k]);
							date.setUTCHours(hours[j]);
							date.setUTCMinutes(minutes[i]);
							date.setUTCSeconds(0);

							// 如果指定了星期几,则需要判断日期是否匹配
							if (dayOfWeek !== '*' &amp;&amp; date.getUTCDay() !== daysOfWeek[m]) {
								continue;
							}

							// 加入到结果数组中
							dates.push(date);
						}
					}
				}
			}
		}

		// 按时间排序
		dates.sort(function(a, b) {
			return a - b;
		});

		// 只返回前10个日期
		return dates.slice(0, 10);
	}

	// 解析Cron表达式的某一部分
	function parsePart(part, min, max) {
		var result = [];

		// 如果是*,则返回全部可能的值
		if (part === '*') {
			for (var i = min; i &lt;= max; i++) {
				result.push(i);
			}
		} else {
			// 否则按逗号分隔,然后再解析每个部分
			var values = part.split(',');
			for (var i = 0; i &lt; values.length; i++) {
				if (values[i].indexOf('/') !== -1) {
					// 如果包含/,则表示步长
					var parts = values[i].split('/');
					var start = parseInt(parts[0]);
					var step = parseInt(parts[1]);
					for (var j = start; j &lt;= max; j += step) {
						result.push(j);
					}
				} else if (values[i].indexOf('-') !== -1) {
					// 如果包含-,则表示范围
					var parts = values[i].split('-');
					var start = parseInt(parts[0]);
					var end = parseInt(parts[1]);
					for (var j = start; j &lt;= end; j++) {
						result.push(j);
					}
				} else {
					// 否则直接解析为数字
					var value = parseInt(values[i]);
					if (isNaN(value) || value &lt; min || value &gt; max) {
						alert('无效的Cron表达式');
						return [];
					}
					result.push(value);
				}
			}
		}

		return result;
	}

	// 根据勾选的选项生成Cron表达式
	function generateCron() {
		var minute = document.getElementById('minute').value;
		var hour = document.getElementById('hour').value;
		var dayOfMonth = document.getElementById('dayOfMonth').value;
		var month = document.getElementById('month').value;
		var dayOfWeek = document.getElementById('dayOfWeek').value;

		var cron = minute + ' ' + hour + ' ' + dayOfMonth + ' ' + month + ' ' + dayOfWeek + ' *';

		document.getElementById('result').innerHTML = cron;
	}

	// 初始化页面
	window.onload = function() {
		document.getElementById('parse').onclick = function() {
			var cron = document.getElementById('cron').value;
			var dates = parseCron(cron);
			var result = '';
			for (var i = 0; i &lt; dates.length; i++) {
				result += dates[i].toString() + '&lt;br&gt;';
			}
			document.getElementById('result').innerHTML = result;
		};

		document.getElementById('generate').onclick = generateCron;
	};
&lt;/script&gt;
</code></pre>
</head>
<body>
	<h1>Cron表达式解析器</h1>
	<h2>功能1:解析Cron表达式</h2>
	<label for="cron">Cron表达式:</label>
	<input type="text" id="cron"><br>
	<button id="parse">解析</button><br>
	<label for="result">解析结果:</label>
	<div id="result"></div>
	<h2>功能2:生成Cron表达式</h2>
	<label for="minute">分钟:</label>
	<input type="text" id="minute" value="0"><br>
	<label for="hour">小时:</label>
	<input type="text" id="hour" value="0"><br>
	<label for="dayOfMonth">日:</label>
	<input type="text" id="dayOfMonth" value="1"><br>
	<label for="month">月份:</label>
	<input type="text" id="month" value="1"><br>
	<label for="dayOfWeek">星期几:</label>
	<input type="text" id="dayOfWeek" value="0"><br>
	<button id="generate">生成</button><br>
	<label for="result">生成结果:</label>
	<div id="result"></div>
</body>
</html>
在线Cron表达式解析器 - 生成和解析Cron表达式

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

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