later.js 没有获取 cron 表达式的下一个日期时间
later.js doesn't get next datetime of cron expression
我使用库 later.js 从 cron 表达式获取下一个日期时间的值。但是下一个结果的 5 次与时间默认值(“7/16/2015 10:44:47”)不正确。这个结果是偏差"hour"。
这是我的代码。
<script src="../later.min.js" type="text/javascript"></script>
<script>
var cron = "0 0/10 7,8,9,10,11,13,14,15,16,17,18 ? 1/1 1-5 *";
var d = new Date("7/16/2015 10:44:47");
later.date.timezone(true);
var sched = later.parse.cron(cron, true);
var results = later.schedule(sched).next(5,d);
for (var i = 0; i < results.length; i++) {
document.write('<p>' + results[i].toLocaleString() + '</p>');
}
</script>
结果不正确:
14:00:00 16/7/2015
14:10:00 16/7/2015
14:20:00 16/7/2015
14:30:00 16/7/2015
14:40:00 16/7/2015
结果正确使用http://www.cronmaker.com/测试:
- Thursday, July 16, 2015 10:50 AM
- Thursday, July 16, 2015 11:00 AM
- Thursday, July 16, 2015 11:10 AM
- Thursday, July 16, 2015 11:20 AM
- Thursday, July 16, 2015 11:30 AM
我找到了问题的答案。所以,本人post解法参考。
在文件 later.js 中,它具有函数 'itemSorter'(第 999 行)。此函数从裁剪表达式中对数组进行排序(在拆分“”和“,”之后)。
function itemSorter(a, b) {
return isHash(a) && !isHash(b) ? 1 : 0;
}
将此函数更改为:
function itemSorter(a, b) {
if (isNaN(a) || isNaN(b)) {
return a > b ? 1 : -1;
}
return a - b;
}
如果您没有later.js,您可以从URL下载:https://github.com/bunkat/later。
我使用库 later.js 从 cron 表达式获取下一个日期时间的值。但是下一个结果的 5 次与时间默认值(“7/16/2015 10:44:47”)不正确。这个结果是偏差"hour"。 这是我的代码。
<script src="../later.min.js" type="text/javascript"></script>
<script>
var cron = "0 0/10 7,8,9,10,11,13,14,15,16,17,18 ? 1/1 1-5 *";
var d = new Date("7/16/2015 10:44:47");
later.date.timezone(true);
var sched = later.parse.cron(cron, true);
var results = later.schedule(sched).next(5,d);
for (var i = 0; i < results.length; i++) {
document.write('<p>' + results[i].toLocaleString() + '</p>');
}
</script>
结果不正确:
14:00:00 16/7/2015
14:10:00 16/7/2015
14:20:00 16/7/2015
14:30:00 16/7/2015
14:40:00 16/7/2015
结果正确使用http://www.cronmaker.com/测试:
- Thursday, July 16, 2015 10:50 AM
- Thursday, July 16, 2015 11:00 AM
- Thursday, July 16, 2015 11:10 AM
- Thursday, July 16, 2015 11:20 AM
- Thursday, July 16, 2015 11:30 AM
我找到了问题的答案。所以,本人post解法参考。
在文件 later.js 中,它具有函数 'itemSorter'(第 999 行)。此函数从裁剪表达式中对数组进行排序(在拆分“”和“,”之后)。
function itemSorter(a, b) {
return isHash(a) && !isHash(b) ? 1 : 0;
}
将此函数更改为:
function itemSorter(a, b) {
if (isNaN(a) || isNaN(b)) {
return a > b ? 1 : -1;
}
return a - b;
}
如果您没有later.js,您可以从URL下载:https://github.com/bunkat/later。