集合附近的日期

时间:2014-08-21 14:34:17

标签: javascript jquery

我有一个可变日期列表,我希望将它们组合在一起,最好是在javascript中。

2014-08-12
2014-08-10
2014-07-28
2014-07-27
2014-01-27
2013-04-27
2003-02-12

此日期列表可以是完全动态的,但这是一个示例结果集。

任何人都可以想到一种优雅的方式来将被认为彼此“接近”的日期分组在一起,在这种情况下将是:

2014-08-12
2014-08-10
2014-07-28
2014-07-27

2014-01-27

2013-04-27

2003-02-12

1 个答案:

答案 0 :(得分:0)

执行此操作的方法是:

  1. 使用.getTime()
  2. 将所有日期字符串转换为数字
  3. 排序
  4. 转换回日期字符串
  5. 这方面的一个例子:

    var dates = ['2014-08-12', '2014-08-10', '2014-07-28', '2014-07-27', '2014-01-27', '2013-04-27', '2003-02-12'],
        groups = [],
        last = 0
    
    dates.map(function (each) {
        return new Date(each).getTime() // 1.
    }).sort(function (a, b) {
        return b-a // 2.
    }).forEach(function (each) {
        if (Math.abs(each-last) > 1e10) { // 1e10 ms = 116 days
            groups.push([]) // 3.
        }
        groups[groups.length-1].push(each)
        last = each
    })
    
    groups.map(function (dates) {
        return dates.map(function (each) {
            return new Date(each).toISOString().substr(0, 10) // 4.
        }).join('\n')
    }).join('\n\n')
    

    您可以将1e10值调整为nearby dates对您的应用程序的意义