Есть ли способ разумно найти начало и конец определенного объекта Date в JavaScript для определенного временного окна (месяц, день, год, неделя)?Создать начальный и конечный диапазоны для конкретной даты и идентификатора JavaScript (месяц, день, год, неделя)?
Я хочу, чтобы иметь возможность указывать любую дату, затем идентификатор (например, месяц, неделю, день или год), затем логическое значение для того, нужно ли использовать время UTC. Он должен вернуть объект JavaScript с двумя ключами (startTime, endTime), где значениями для этих ключей являются миллисекунды эпохи (или даты), представляющие мой диапазон.
Я начал писать функцию, чтобы сделать это (смотри ниже), просто интересно, если есть более разумный способ идти о делать это:
/**
* @param rangeValue; String ('year', 'month', 'week', 'day')
* @param dateTime; JavaScript Date Object.
* @param useUTC; Boolean. Determines whether or not UTC is to be used or default browser time
* @returns {{}}; startTime and endTime, in epoch milliseconds
*/
function generateTimeRange(rangeValue, dateTime, useUTC) {
var dateRange = {};
var year = dateTime.getUTCFullYear();
var month = dateTime.getUTCMonth();
var dayOfWeek = dateTime.getUTCDay();
var day = dateTime.getUTCDate();
if (!useUTC) {
year = dateTime.getFullYear();
month = dateTime.getMonth();
dayOfWeek = dateTime.getDay();
day = dateTime.getDate();
}
if (rangeValue === 'year') {
dateRange.startTime = new Date(year, 0, 0, 0, 0, 0, 0).getTime();
dateRange.endTime = new Date(year + 1, 0, 0, 0, 0, 0, 0).getTime() - 1;
} else if (rangeValue === 'month') {
dateRange.startTime = new Date(year, month, 0, 0, 0, 0, 0).getTime();
month += 1;
if (month > 11)
year += 1;
dateRange.endTime = new Date(year + 1, month % 12, 0, 0, 0, 0, 0).getTime() - 1;
} else if (rangeValue === 'week') {
// Do week calculation
} else if (rangeValue === 'day' {
// Do day calculation
}
return dateRange;
}
EDIT: Просто обнаружил, что Moment.js имеет startOf
и endOf
методы. Есть ли элегантный способ сделать это без внешних библиотек?
Перед тем, как сделать «начало» и «конец» Вы должны определить, что они , Например. Сеансы ISO начинаются в понедельник, недели США обычно в воскресенье. Конец недели может быть в воскресенье (ISO), в субботу (США) или в пятницу (западная рабочая неделя).Некоторые культуры имеют деловую неделю с субботы по среду или четверг, а пятница - это эквивалент западного воскресенья. – RobG
Обратите внимание, что в 'new Date (year, 0, 0, 0, 0, 0, 0) значение дня должно быть 1, иначе вы получите 31 декабря предыдущего года. ;-) – RobG