以下はJavaScriptを使用して特定の期間の開始日と終了日を取得する方法です。
二、今週、先週、来週の開始日と終了日を取得
三、今月、先月、来月の開始日と終了日を取得
四、今年、去年、来年の開始日と終了日を取得
function getToday(offset) {
const today = new Date();
const dayOffset = offset || 0;
today.setDate(today.getDate() + dayOffset);
const year = today.getFullYear();
let month = today.getMonth() + 1;
let day = today.getDate();
month = month < 10 ? '0' + month : month;
day = day < 10 ? '0' + day : day;
return `${year}-${month}-${day}`;
}
getToday(); // 引数なしの場合、今日の日付を返す。引数に-1や1を入れると昨日や明日を取得可能。
function getWeekStartEnd(period, weekOffset) {
const now = new Date();
const currentDay = now.getDay();
const oneDayMs = 24 * 60 * 60 * 1000;
const offsetMs = oneDayMs * 7 * (weekOffset || 0);
let targetDate;
if (period === 'start') {
targetDate = new Date(now - (currentDay - 1) * oneDayMs + offsetMs);
} else if (period === 'end') {
targetDate = new Date(now.getTime() + (7 - currentDay) * oneDayMs + offsetMs);
}
const year = targetDate.getFullYear();
let month = targetDate.getMonth() + 1;
let day = targetDate.getDate();
month = month < 10 ? '0' + month : month;
day = day < 10 ? '0' + day : day;
return `${year}-${month}-${day}`;
}
getWeekStartEnd('start'); // 現在の週の月曜日の日付を取得
getWeekStartEnd('end', 1); // 次週の日曜日の日付を取得
function getMonthStartEnd(period, monthOffset) {
const date = new Date();
let year = date.getFullYear();
let month = date.getMonth() + 1;
if (Math.abs(monthOffset) > 12) {
monthOffset %= 12;
}
if (monthOffset !== 0) {
if (month + monthOffset > 12) {
year++;
month = (month + monthOffset) % 12 || 12;
} else if (month + monthOffset < 1) {
year--;
month = 12 + month + monthOffset;
} else {
month += monthOffset;
}
}
month = month < 10 ? '0' + month : month;
const firstDay = `${year}-${month}-01`;
let lastDay;
switch (month) {
case '01': case '03': case '05': case '07': case '08': case '10': case '12':
lastDay = `${year}-${month}-31`;
break;
case '02':
lastDay = ((year % 4 === 0 && year % 100 !== 0) || (year % 400 === 0)) ? `${year}-${month}-29` : `${year}-${month}-28`;
break;
default:
lastDay = `${year}-${month}-30`;
}
return period === 'start' ? firstDay : lastDay;
}
getMonthStartEnd('start'); // 今月の初日を取得
function getYearRange(period, yearOffset) {
const now = new Date();
const year = now.getFullYear() + (yearOffset || 0);
if (period === 'start') {
return `${year}-01-01`;
} else if (period === 'end') {
return `${year}-12-31`;
}
return `${year}-01-01/${year}-12-31`;
}
getYearRange('start', 1); // 来年の初日を取得