日付処理いつも忘れちゃうからまとめる
const today = new Date(); // 変数が呼ばれた時の日時がDate型で取得できる
const year = today.getFullYear(); // 2019とかを取得できる
const month = today.getMonth(); // 月は0~11の値で管理されているというトラップ
const date = today.getDate(); // 日付は普通に1~の数字で管理されている
const day = today.getDay(); // 曜日は0~6の数字で管理されている 0が日曜で6が土曜
const tomorrow = new Date(today.setDate(today.getDate() + 1));
const nextMonth = new Date(today.setMonth(today.getMonth() + 1));
const nextYear = new Date(today.setFullYear(today.getFullYear() + 1));
const beginDate = new Date(today.getFullYear(), today.getMonth(), 1); // その月の初日
const endDate = new Date(today.getFullYear(), today.getMonth() + 1, 0); // その月の終日
UnixとDateの変換
function convertDateToUnix(date: Date): number {
const unix = Math.round(date.getTime() / 1000);
return unix;
}
function convertUnixToDate(unix: number): Date {
const date = new Date(unix * 1000);
return date;
}
Date型を表示させるときに便利なdayjs
import dayjs from 'dayjs';
import 'dayjs/locale/ja'; // これimportしないとエラー吐かれる
enum DateFormat {
YY_MM_DD_dd = 'YYYY/MM/DD(dd)',
MM_DD_dd = 'MM/DD(dd)',
} // enum型で表示パターンを書いておくと後で楽(jsはenum使えないけど...)
function formatDate(date: Date, type: DateFormat): string {
switch (type) {
case DateFormat.YY_MM_DD_dd:
return dayjs(date)
.locale('ja')
.format('YYYY/MM/DD(dd)');
case DateFormat.MM_DD_dd:
return dayjs(date)
.locale('ja')
.format('MM/DD(dd)');
default:
return '';
}
};
const today = formatDate(new Date(), DateFormat.YY_MM_DD_dd); // 2019/11/22(金)
const today2 = formatDate(new Date(), DateFormat.MM_DD_dd); // 11/22(金)
その他あると便利かもしれない関数
// 日付を渡すと、その日付がその月の第何週目に当たるかを返してくれる関数
function getWeekIndex(date: Date): number {
const week = 7; // 1週間は7日
const sunday = date.getDate() - date.getDay();
const nextSaturday = sunday + 6;
const targetDay = nextSaturday + 6;
const weekIndex = Math.floor(targetDay / week);
return weekIndex;
}
// 日付とX週目を渡すと、その月のX週目にあたる平日の日付をDate配列として返してくれる関数
function getWeekOfMonth(date: Date, weekIndex: number): Date[] {
const year = date.getFullYear();
const month = date.getMonth();
const beginDate = new Date(year, month, (weekIndex - 1) * 7 + 1); // その月の最初の日付
const day_num = beginDate.getDay(); // その月の週初めの曜日番号
let beginDayParam = 0; // その週の月曜を取得するためのパラメーター
let targetDates: Date[] = [];
const sunday = 0;
const monday = 1;
const saturday = 6;
if (day_num === monday) {
beginDayParam = 0;
} else if (day_num === sunday) {
beginDayParam = 1;
} else if (day_num === saturday) {
beginDayParam = 2;
} else {
// それ以外は曜日の分だけ日付を戻す
beginDayParam = -day_num + 1;
}
beginDate.setDate(beginDate.getDate() + beginDayParam); // その週の月曜日取得
const endDate = new Date(beginDate);
endDate.setDate(endDate.getDate() + 4); // その週の金曜日取得
// 欲しい期間の日付のDate配列を生成
while (1) {
const pushDate = new Date(beginDate);
targetDates.push(pushDate);
if (beginDate.getDate() === endDate.getDate()) break;
beginDate.setDate(beginDate.getDate() + 1);
}
return targetDates;
}