Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Javascript Get Sequential Dates in Array

I have an array with the following values (example):

   [
      1367848800000: true,
      1367935200000: true,
      1368021600000: true,
      1368108000000: true,
      1368194400000: true,
      1368367200000: true,
      1368540000000: true,
      1368626400000: true,
      1368712800000: true
    ]

Where the index is a date time. The date time will always be at 12:00:00 on a date.

In this example, the first five dates are consecutive, then one day by itself, and then another group of 3 dates. An example of what I mean is below.

Dates on Calendar

Now, what I am trying to do is find sequential dates and put them into an array as follows:

   [
      1367848800000,
      1367935200000,
      1368021600000,
      1368108000000,
      1368194400000
   ],
   [
      1368367200000,
      1368540000000,
      1368626400000,
   ],
   [
      1368712800000Ω
   ]

So in the end, I have an array, with 3 arrays of all the times. I have tried numerous pieces of code, but everything bugs out and nothing is worth posting on here. Any help would be much appreciated!

like image 469
MichaelH Avatar asked May 22 '13 11:05

MichaelH


1 Answers

The following approach uses array .reduce() method:

var arr = [1367848800000, 1367935200000, 1368021600000,
           1368108000000, 1368194400000, 1368367200000,
           1368540000000, 1368626400000, 1368712800000],
    i = 0,
    result = arr.reduce(function(stack, b) {
        var cur = stack[i],
            a = cur ? cur[cur.length-1] : 0;

        if (b - a > 86400000) {
            i++;
        }

        if (!stack[i])
            stack[i] = [];

        stack[i].push(b);

        return stack;
    }, []);

console.log(result);

DEMO: http://jsfiddle.net/gbC8B/1/

like image 178
VisioN Avatar answered Sep 23 '22 18:09

VisioN