Datespace
Generate an array of linearly spaced dates.
Usage
var datespace = require( '@stdlib/array/datespace' );
datespace( start, stop[, length][, opts] )
Generates an array
of linearly spaced Date
objects. If a length
is not provided, the default output array
length is 100
.
var end = '2014-12-02T07:00:54.973Z';
var start = new Date( end ) - 60000;
var arr = datespace( start, end, 6 );
/* 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)',
'Mon Dec 01 2014 23:00:54 GMT-0800 (PST)'
]
*/
The start
and stop
times may be either Date
objects, date strings, Unix timestamps, or JavaScript timestamps.
// JavaScript timestamps:
var end = 1417503654973;
var start = new Date( end - 60000 );
var arr = datespace( start, end, 6 );
/* 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)',
'Mon Dec 01 2014 23:00:54 GMT-0800 (PST)'
]
*/
// Unix timestamps:
end = 1417503655;
start = end - 60;
arr = datespace( start, end, 6 );
/* 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)',
'Mon Dec 01 2014 23:00:54 GMT-0800 (PST)'
]
*/
The output array
is guaranteed to include the start
and end
times. Beware, however, that values between the start
and end
are subject to rounding errors. For example,
var arr = datespace( 1417503655000, 1417503655001, 3 );
// returns [ 1417503655000, 1417503655000, 1417503655001 ]
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 = datespace( 1417503655000, 1417503655001, 3, {
'round': 'ceil'
});
// returns [ 1417503655000, 1417503655001, 1417503655001 ]
// Equivalent of Math.round():
arr = datespace( 1417503655000, 1417503655001, 3, {
'round': 'round'
});
// returns [ 1417503655000, 1417503655001, 1417503655001 ]
Examples
var datespace = require( '@stdlib/array/datespace' );
var start;
var arr;
var end;
end = '2014-12-02T07:00:54.973Z';
start = new Date( end ) - 100000;
// Default behavior:
arr = datespace( start, end );
console.log( arr.join( '\n' ) );
// Specify length:
arr = datespace( start, end, 10 );
console.log( arr.join( '\n' ) );
arr = datespace( start, end, 11 );
console.log( arr.join( '\n' ) );
// Create an array with decremented values:
arr = datespace( end, start, 11 );
console.log( arr.join( '\n' ) );