1
1

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.

jQuery + moment.jsでカレンダーと連動する前日翌日ボタンをつくる

Last updated at Posted at 2019-10-22

前提

使用するのは
jQuery
moment.js
flatpickr(カレンダーライブラリ)

動作

See the Pen jQuery + moment.jsでカレンダーと連動する前日翌日ボタン by natusme (@natsume0718) on CodePen.

解説

流れとしては、
1.画面表示されたらDateオブジェクトを作成しmomentでフォーマット、日付表示領域のtextを置き換える

2.前日、翌日ボタンが押されたら、初回時に作成したDateに±1した値をmoment.jsでフォーマットし日付表示領域のtextを置き換える

3.カレンダーで日付が選択されたら、初回時に作成したDateに選択された日付を入れ、moment.jsでフォーマットし日付表示領域のtextを置き換える

1.画面表示されたらDateオブジェクトを作成しmomentでフォーマット、日付表示領域のtextを置き換える

HTML
<button class="js-previous-date">前日</button>
<span class="js-display-date"></span>
<button class="js-next-date">翌日</button>
<button class="js-calendar">Calendar</button>

js-display-dateをロード後に書き換えています。
moment(displayDate).format("YYYY/MM/DD")2019/10/23のような形式に整形しています。

JS
$(() => {
  
  let displayDate = new Date();
  $(".js-display-date").text(moment(displayDate).format("YYYY/MM/DD"));

2.前日、翌日ボタンが押されたら、初回時に作成したDateに±1した値をmoment.jsでフォーマットし日付表示領域のtextを置き換える

displayDate.setDate(displayDate.getDate() + 1);displayDate.getDate() + 1で現在の日付(整数)に+1したものが得られるので、それを日付としてセットしています。
フォーマット部分は初回と同じです。
メソッド化してやってもいいと思います。

JS

 $(".js-previous-date").on("click", () => {
    displayDate.setDate(displayDate.getDate() + 1);
    $(".js-display-date").text(moment(displayDate).format("YYYY/MM/DD"));
  });

  $(".js-next-date").on("click", function() {
    displayDate.setDate(displayDate.getDate() + 1);
    $(".js-display-date").text(moment(displayDate).format("YYYY/MM/DD"));
  });


3.カレンダーで日付が選択されたら、初回時に作成したDateに選択された日付を入れ、moment.jsでフォーマットし日付表示領域のtextを置き換える

flatpckrのイベントであるonValueUpdateという日付が変更された際に呼び出されるものを用います。
その際に変更した日付を取得できるのでそれをフォーマットしています。
displayDateに代入しないと、前日翌日ボタンを押した際に、カレンダーで選択した日付が考慮されなくなるので入れています。
また、引数にわたってくる日付がDateオブジェクトではないので、渡ってくるYY-MM-DDからDateオブジェクトを作成しています

JS
flatpickr(".js-calendar", {
    onValueUpdate(selectedDates, dateStr) {
      displayDate = new Date(dateStr);
      $(".js-display-date").text(moment(displayDate).format("YYYY/MM/DD"));
    }
  });

あとがき

Vueで一度やったものをjQueryに変えてみましたが、この程度ならjQueryでもいいのかなとは思いました。
間違えやよりよい方法がありましたら、教えていただけますと幸いです

1
1
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
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?