Generates an array of linearly spaced dates using a provided increment.
$ npm install compute-incrdatespace
For use in the browser, use browserify.
To use the module,
var incrdatespace = require( 'compute-incrdatespace' );
Generates an array
of linearly spaced Date
objects. If an increment
is not provided, the default increment
is day
.
var stop = '2014-12-02T07:00:54.973Z',
start = new Date( stop ) - 60000;
var arr = incrdatespace( start, stop, '8sec' );
/* returns [
'Mon Dec 01 2014 22:59:54 GMT-0800 (PST)',
'Mon Dec 01 2014 23:00:06 GMT-0800 (PST)',
'Mon Dec 01 2014 23:00:18 GMT-0800 (PST)',
'Mon Dec 01 2014 23:00:30 GMT-0800 (PST)',
'Mon Dec 01 2014 23:00:42 GMT-0800 (PST)'
]
*/
The start
and stop
times may be either Date
objects, date strings, Unix timestamps, or JavaScript timestamps.
var start, stop, arr;
// JavaScript timestamps:
stop = 1417503654973;
start = new Date( stop - 60000 );
arr = incrdatespace( start, stop, 8000 );
/* returns [
'Mon Dec 01 2014 22:59:54 GMT-0800 (PST)',
'Mon Dec 01 2014 23:00:06 GMT-0800 (PST)',
'Mon Dec 01 2014 23:00:18 GMT-0800 (PST)',
'Mon Dec 01 2014 23:00:30 GMT-0800 (PST)',
'Mon Dec 01 2014 23:00:42 GMT-0800 (PST)'
]
*/
// Unix timestamps:
stop = 1417503655;
start = stop - 60;
arr = incrdatespace( start, stop, '8s' );
/* returns [
'Mon Dec 01 2014 22:59:54 GMT-0800 (PST)',
'Mon Dec 01 2014 23:00:06 GMT-0800 (PST)',
'Mon Dec 01 2014 23:00:18 GMT-0800 (PST)',
'Mon Dec 01 2014 23:00:30 GMT-0800 (PST)',
'Mon Dec 01 2014 23:00:42 GMT-0800 (PST)'
]
*/
The increment
can be specified as either a number
(units of milliseconds) or a string
. The following units are recognized:
ms, millisecond, milliseconds
s, sec, secs, second, seconds
m, min, mins, minute, minutes
h, hr, hrs, hour, hours
d, day, days
w, wk, wks, week, weeks
b, month, months
y, yr, yrs, year, years
Units can be provided as is
var arr = incrdatespace( start, stop, 'd' );
or combined with a numeric
value.
var arr = incrdatespace( start, stop, '5days' );
The rule is that the scalar value and its corresponding unit must not be separated; e.g., the following is not valid: 5 days
.
Scalar-unit pairs can be combined to create arbitrarily complex increments as long as the pairs are delineated using dot
notation.
var arr = incrdatespace( start, stop, '1y.2b.5days.12hours.34sec.20ms' );
To decrement, prefix the scalar unit string
with a minus sign.
var arr = incrdatespace( stop, start, '-1y.2b.5days.12hours.34sec.20ms' );
The output array
is guaranteed to include the start
time but is not guaranteed to include the stop
time (in most cases, the array
will not include the stop
time). Beware, however, that values between the start
and end
are subject to rounding errors. For example,
var arr = incrdatespace( 1417503655000, 1417503655001, 0.5 );
// returns [ 1417503655000, 1417503655000 ]
where sub-millisecond values are truncated by the Date
constructor. Duplicate values should only be a problem when the interval separating consecutive times is less than a millisecond. As the interval separating consecutive dates goes to infinity, the quantization noise introduced by millisecond resolution is negligible.
By default, fractional timestamps are floored. To specify that timestamps always be rounded up or to the nearest millisecond when converted to Date
objects, set the round
option (default: floor
).
// Equivalent of Math.ceil():
var arr = incrdatespace( 1417503655000, 1417503655001, 0.5, { 'round': 'ceil' } );
// returns [ 1417503655000, 1417503655001 ]
// Equivalent of Math.round():
var arr = incrdatespace( 1417503655000, 1417503655001, 0.5, { 'round': 'round' } );
// returns [ 1417503655000, 1417503655001 ]
This function is similar to compute-incrspace.
var incrdatespace = require( 'compute-incrdatespace' ),
start,
stop,
arr;
stop = '2014-12-02T07:00:54.973Z';
start = new Date( stop ) - 5*86400000;
// Default behavior:
arr = incrdatespace( start, stop );
console.log( arr.join( '\n' ) );
// Specify increment:
arr = incrdatespace( start, stop, '12h' );
console.log( arr.join( '\n' ) );
// Create an array using a negative increment:
arr = incrdatespace( stop, start, '-12h' );
console.log( arr.join( '\n' ) );
To run the example code from the top-level application directory,
$ node ./examples/index.js
Unit tests use the Mocha test framework with Chai assertions. To run the tests, execute the following command in the top-level application directory:
$ make test
All new feature development should have corresponding unit tests to validate correct functionality.
This repository uses Istanbul as its code coverage tool. To generate a test coverage report, execute the following command in the top-level application directory:
$ make test-cov
Istanbul creates a ./reports/coverage
directory. To access an HTML version of the report,
$ make view-cov
Copyright © 2014. Athan Reines.