later.js没有得到cron表达式的下一个日期时间

时间:2015-07-16 04:49:22

标签: javascript jquery cron laterjs

我使用library later.js从cron表达式获取下一个datetime的值。但是结果的5次接下来的时间默认是不正确的(“7/16/2015 10:44:47”)。此结果是偏差“小时”。 这是我的代码。

<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

     

2015年6月16日14:10:00

     

14/20:00 16/7/2015

     

14:30:00 16/7/2015

     

14:40:00 16/7/2015

结果正确使用http://www.cronmaker.com/进行测试:

  
      
  1. 2015年7月16日星期四上午10:50
  2.   
  3. 2015年7月16日星期四上午11:00
  4.   
  5. 2015年7月16日星期四上午11:10
  6.   
  7. 2015年7月16日(星期四)上午11:20
  8.   
  9. 2015年7月16日星期四上午11:30
  10.   

1 个答案:

答案 0 :(得分:0)

我找到了问题的答案。因此,我发布解决方案以供参考。

在文件later.js中,它有'itemSorter'功能(第999行)。此函数从crop表达式中排序数组(在拆分''和','之后)。

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,可以从网址下载:https://github.com/bunkat/later