62
44

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

JSやTSにおける日付処理

Last updated at Posted at 2019-11-22

日付処理いつも忘れちゃうからまとめる

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;
}

62
44
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
62
44

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?