91 lines
2.5 KiB
JavaScript
91 lines
2.5 KiB
JavaScript
// Playing around with dates
|
|
|
|
export const NO_OF_YEAR_MONTHS = 12;
|
|
export const NO_OF_DAYS_IN_WEEK = 7;
|
|
export const DAYS_IN_YEAR = 375;
|
|
export const NO_OF_MILLIS = 1000;
|
|
export const SEC_IN_DAY = 86400;
|
|
|
|
export const MONTH_NAMES = ["January", "February", "March", "April", "May",
|
|
"June", "July", "August", "September", "October", "November", "December"];
|
|
export const MONTH_NAMES_SHORT = ["Jan", "Feb", "Mar", "Apr", "May", "Jun",
|
|
"Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
|
|
|
|
export const DAY_NAMES_SHORT = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"];
|
|
export const DAY_NAMES = ["Sunday", "Monday", "Tuesday", "Wednesday",
|
|
"Thursday", "Friday", "Saturday"];
|
|
|
|
// https://stackoverflow.com/a/11252167/6495043
|
|
function treatAsUtc(date) {
|
|
let result = new Date(date);
|
|
result.setMinutes(result.getMinutes() - result.getTimezoneOffset());
|
|
return result;
|
|
}
|
|
|
|
export function getYyyyMmDd(date) {
|
|
let dd = date.getDate();
|
|
let mm = date.getMonth() + 1; // getMonth() is zero-based
|
|
return [
|
|
date.getFullYear(),
|
|
(mm > 9 ? '' : '0') + mm,
|
|
(dd > 9 ? '' : '0') + dd
|
|
].join('-');
|
|
}
|
|
|
|
export function clone(date) {
|
|
return new Date(date.getTime());
|
|
}
|
|
|
|
export function timestampSec(date) {
|
|
return date.getTime() / NO_OF_MILLIS;
|
|
}
|
|
|
|
export function timestampToMidnight(timestamp, roundAhead = false) {
|
|
let midnightTs = Math.floor(timestamp - (timestamp % SEC_IN_DAY));
|
|
if (roundAhead) {
|
|
return midnightTs + SEC_IN_DAY;
|
|
}
|
|
return midnightTs;
|
|
}
|
|
|
|
// export function getMonthsBetween(startDate, endDate) {}
|
|
|
|
export function getWeeksBetween(startDate, endDate) {
|
|
let weekStartDate = setDayToSunday(startDate);
|
|
return Math.ceil(getDaysBetween(weekStartDate, endDate) / NO_OF_DAYS_IN_WEEK);
|
|
}
|
|
|
|
export function getDaysBetween(startDate, endDate) {
|
|
let millisecondsPerDay = SEC_IN_DAY * NO_OF_MILLIS;
|
|
return (treatAsUtc(endDate) - treatAsUtc(startDate)) / millisecondsPerDay;
|
|
}
|
|
|
|
export function areInSameMonth(startDate, endDate) {
|
|
return startDate.getMonth() === endDate.getMonth()
|
|
&& startDate.getFullYear() === endDate.getFullYear();
|
|
}
|
|
|
|
export function getMonthName(i, short = false) {
|
|
let monthName = MONTH_NAMES[i];
|
|
return short ? monthName.slice(0, 3) : monthName;
|
|
}
|
|
|
|
export function getLastDateInMonth(month, year) {
|
|
return new Date(year, month + 1, 0); // 0: last day in previous month
|
|
}
|
|
|
|
// mutates
|
|
export function setDayToSunday(date) {
|
|
let newDate = clone(date);
|
|
const day = newDate.getDay();
|
|
if (day !== 0) {
|
|
addDays(newDate, (-1) * day);
|
|
}
|
|
return newDate;
|
|
}
|
|
|
|
// mutates
|
|
export function addDays(date, numberOfDays) {
|
|
date.setDate(date.getDate() + numberOfDays);
|
|
}
|