Как разбить дату/время на интервал имея начальное и конечное время
Как разбить дату/время на интервал, тоесть есть начальное время и конечное
let start = 1595902440886; // начальное время
let end = 1595904296582; // конечное время
Нужно в зависимости от диапазона разбить на время, на выводе должно быть в виде массива
Пример:
[ 15:00, 15:30, 14:00, 14:30, 15:00 ] // на минуты
[ 1.04.2020, 2.04.2020, 3.04.2020, 4.04.2020, 5.04.2020 ] // на дни
// ... и тд, разные варианты в зависимости от расстояния start и end
Это интервал между датами или временем в зависимости от длины, чтобы отобразить после это время на графике
Ответы (1 шт):
Разбиение на метки - элементарно:
function splitInterval(start, end, step) {
let result = [];
for (let ts = start; ts < end; ts += step) {
result[result.length] = ts;
}
if (result.length == 1) {
result[result.length] = end;
}
return result;
}
// ****************************************
let start = 1595902440886; // начальное время
let end = 1595904296582; // конечное время
let step = 2 * 60 * 1000; // шаг в милисекундах (2 минуты)
let result = splitInterval(start, end, step);
console.log('Start: ' + (new Date(start)).toLocaleString());
console.log('End: ' + (new Date(end)).toLocaleString());
for (let i = 0; i < result.length; ++i) {
console.log('Step ' + i + ': ' + (new Date(result[i])).toLocaleString());
}
Но по вашему ТЗ есть замечания:
Первая метка должна начинаться именно со стартого времени. Попытка её округлять приведет к многочисленным логическим проблемам. Подумайте, что если стартовое время у вас 3:14, а длина шага скажем 17 секунд. Тогда где должна быть первая метка? Именно поэтому первая метка должна совпадать со стартовым временем.
Ваша основная задача - это разбить любой интервал на метки. Вопрос в каком именно формате выводить эти метки на экран - идивидуален для каждого разбиения. Попытка сделать нечто универсальное приведет к логическим ошибкам. Подумайте что, если интервал у вас скажем более 1-2 суток и вы делите его на шаги длиной в 1 час, а выводите в виде
[01:00:00], [02:00:00], [03:00:00] .... Не забывайте также, что в месяцах переменное количество дней, и вывод красивых дат типа[01.01.2000], [01.02.2000], [01.03.2000] ...подразумевает переменную длину шагов. Поэтому, окончательный формат метки должен решаться индивидуально для каждого разбиения.
Вообще нормальные библиотеки для работы с графиками устроены так, что им передаются только сырые даные. График строится и отрисовывается по сырым данным. А вот метки форматируются в момент их отрисовки, по формату, который задает пользователь индивидуально.
