在线Cron表达式解析器 - 生成和解析Cron表达式
<!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 < minutes.length; i++) {
for (var j = 0; j < hours.length; j++) {
for (var k = 0; k < daysOfMonth.length; k++) {
for (var l = 0; l < months.length; l++) {
for (var m = 0; m < 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 !== '*' && 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 <= max; i++) {
result.push(i);
}
} else {
// 否则按逗号分隔,然后再解析每个部分
var values = part.split(',');
for (var i = 0; i < 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 <= 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 <= end; j++) {
result.push(j);
}
} else {
// 否则直接解析为数字
var value = parseInt(values[i]);
if (isNaN(value) || value < min || value > 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 < dates.length; i++) {
result += dates[i].toString() + '<br>';
}
document.getElementById('result').innerHTML = result;
};
document.getElementById('generate').onclick = generateCron;
};
</script>
</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>
原文地址: https://www.cveoy.top/t/topic/mQXY 著作权归作者所有。请勿转载和采集!