見出し画像

【Javascript】「今週かどうか」を判定する

ある日付が、「今週の出来事かどうか」を判定します。

結論

function is_this_week(target_date){
  // target_dateは、確認したい日付をDateオブジェクト化したものを渡す

  // 【STEP1:今日の日付を取得する】
  let today = new Date;
  let today_day_index = today.getDay(); // 曜日が0~6までの数字で取れます

  // 【STEP2:直前の日曜日と次の土曜日を取得する】
  // 直前の日曜日と直後の土曜日を算出するためのDateオブジェクトを作成
  let last_Sunday =  new Date()
  let next_Saturday = new Dae()

  // 今日の日付から曜日インデックス分遡った日は日曜日
  last_Sunday.setDate(today.getDate() - today_day_index) 
  // 時・分・秒にnow()した瞬間の時間が残っているので00:00にセット
  last_Sunday = new Date(last_Sunday.getFullYear(), last_Sunday.getMonth(), last_Sunday.getDate(), 0, 0, 0);

  // 直前の日曜日から6日後が次の土曜日
  next_Saturday.setDate(last_Sunday.getDate() + 6)
  // 時間を23:35:59にセット
  next_Saturday = new Date(next_Saturday.getFullYear(), next_Saturday.getMonth(), next_Saturday.getDate(), 23, 59, 59);

  // 【STEP3:比較したい日付と、基準となる日曜日・土曜日のエポック秒を比較する】
  // 直前の日曜日より新しい=大きい日付で、次の土曜日より前の=小さい日付なら今週。
  if( last_Sunday.getTime() > target_date.getTime() ){
    // 日曜日より古い=小さい日付 = 今週じゃない
    return false
  }
  if( target_date.getTime() > next_Saturday.getTime() ){
    //  土曜日より大きい=先の日付 = 今週じゃない
    return false
  }

  // ここまで来れたら今週
  return true
}

家計簿系のアプリを作っていて、一週間ごとの集計をしたいと思い、入力した日付を取得して「今週の出来事なら集計する」という処理を作ろうとして、「……今週の出来事なら、ってどうやって判断するんだ?」と詰まったので記録です。

月曜始まりの一週間で計算しようとするとそこをずらす必要があるのでちょっと面倒になりますが、今回はざっくり区切れれば良いので、JSのDate.getDay()で取得出来るインデックスに則って、日曜日~土曜日の一週間で計算しています。

なお、日付計算のハマりどころはこちらの記事にまとめてあります

日付計算、普通に足し引きすると閏年とかの計算が面倒なので、SetDate使って計算してあげると楽なのですが、Set系の使い方、思い込みで使おうとするとあちゃーって目に遭うことがあるので注意しましょう。

この記事が気に入ったらサポートをしてみませんか?