🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
date

dateは、date型や日付に関する関数や処理についてのタグです

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

4回答

2436閲覧

javascriptで特定の日付以外の曜日を取得「getDay()」したい場合

_cr

総合スコア22

date

dateは、date型や日付に関する関数や処理についてのタグです

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2019/11/18 05:36

失礼します。

day1 = 3, enable1 = Wed Nov 20 2019 00:00:00 GMT+0900 (日本標準時) {}
day2 = 3, enable2 = Wed Jan 01 2020 00:00:00 GMT+0900 (日本標準時) {}

で上記2日とも水曜日なのですがこの上記2日を除いた水曜日の日付を取得したいんですが、

どういったやり方がありますでしょうか??

javascript

1function(currentDate) { 2 var enable1 = new Date('November 20, 2019'); 3 var enable2 = new Date('January 01, 2020'); 4 var day1 = enable1.getDay(); 5 var day2 = enable2.getDay(); 6 7 return (currentDate.getDay() === 3); 8}

ご鞭撻のほどよろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maisumakun

2019/11/18 05:38

> この上記2日を除いた水曜日の日付を取得したいんですが 水曜日は無限にあるかと思いますが、どの水曜日をどれだけ取得したいのでしょうか。
_cr

2019/11/18 05:41

コメントありがとうございます。説明漏れでした。。 2019年11月から2020年1月の3か月間の間で取得をしたいです。 その中で、11月20日と1月1日が水曜日になっててその二日を除いた水曜日の日付を取得したいんですがどうすればいいでしょうか。。
hentaiman

2019/11/18 05:44

getDay()である必要はあるんですか?
_cr

2019/11/18 05:47

こめんとありがとうございます。 三か月分全ての水曜日を取得するとなるとgetDay()なのかなと思ってましてですね。。。 2019年11月20日と2020年01月01日だけ除いた日にちが欲しいんですが、分からなくてですね。
hentaiman

2019/11/18 06:32

既に回答にありますが、momentjsの利用をおすすめします
guest

回答4

0

ベストアンサー

javascript

1var start=new Date(2019,10,1).getTime(); 2var end =new Date(2020,0,31).getTime(); 3var count=(end-start)/(60*60*24*1000) + 1; 4var day=3; 5var disable = [new Date('November 20, 2019').getTime(),new Date('January 01, 2020').getTime()]; 6var days=Array(count).fill(null).map((x,y)=>start+y*60*60*24*1000).filter(x=>new Date(x).getDay()==day&&disable.indexOf(x)==-1).map(x=>new Date(x));

結果

Wed Nov 06 2019 00:00:00 GMT+0900 Wed Nov 13 2019 00:00:00 GMT+0900 Wed Nov 27 2019 00:00:00 GMT+0900 Wed Dec 04 2019 00:00:00 GMT+0900 Wed Dec 11 2019 00:00:00 GMT+0900 Wed Dec 18 2019 00:00:00 GMT+0900 Wed Dec 25 2019 00:00:00 GMT+0900 Wed Jan 08 2020 00:00:00 GMT+0900 Wed Jan 15 2020 00:00:00 GMT+0900 Wed Jan 22 2020 00:00:00 GMT+0900 Wed Jan 29 2020 00:00:00 GMT+0900

投稿2019/11/18 05:55

編集2019/11/18 08:03
yambejp

総合スコア116661

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

題意は

  • 2019年11月から2020年1月の間にある全ての水曜日を出力する
  • ただし、11月20日と1月1日は除く

のですよね?

愚直に考えれば、11月の最初の水曜日がいつか、さえ分かれば、水曜日はそこから7日ごとに出てきますから、あとは

  • 初期値として 11月の最初の水曜日を設定する
  • 日を回す while ループを行う。終了条件は「2020年2月以降を示している」ようになったら
  • ループの中で、着目している日が 11月20日でも1月1日でもなければ、出力する
  • 着目している日を7日(=一週間)ずらす

でよいですよね。

投稿2019/11/18 06:47

tacsheaven

総合スコア13703

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

_cr

2019/11/18 07:46

コメントありがとうございます! その引出しがまだすぐに思いつかないので勉強になります。 少しずつ自分で理解していって頑張ります。。
guest

0

こんにちは

以下は、日付操作で便利なライブラリ moment を使ってみたコード例です。

html

1<ul class="wednesdays" />

javascript

1const start = moment('2019-11-01'), 2 end = moment('2020-01-31'), 3 excludedDates = [ 4 moment('2019-11-20'), 5 moment('2020-01-01') 6 ]; 7 8const item = (m) => { 9 const listItem = document.createElement('li'); 10 listItem.textContent = m.format('YYYY年MM月DD日'); 11 return listItem; 12} 13 14for (let date=start.day(10); date <= end; date.add(1, 'week')) { 15 if(excludedDates.some(m => +m === +date)) 16 continue; 17 18 document.querySelector('.wednesdays').appendChild(item(date)); 19}

   

  • 参考: 以下、 momentドキュメント Day of Week より引用

If the range is exceeded, it will bubble up to other weeks.

moment().day(-7); // last Sunday (0 - 7)
moment().day(0); // this Sunday (0)
moment().day(7); // next Sunday (0 + 7)
moment().day(10); // next Wednesday (3 + 7)
moment().day(24); // 3 Wednesdays from now (3 + 7 + 7 + 7)

備考

上記のコードを、2019-11-01〜2020-01-31ではない、別の範囲で使おうとする場合に、開始日付(上記のコードでは start )が、水曜日の場合は
let date=start.day(10);
としているところを
let date=start.day(3);
とする必要がある点を考慮しなければなりません。

投稿2019/11/18 06:28

編集2019/11/18 06:55
jun68ykt

総合スコア9058

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

_cr

2019/11/18 07:45

ありがとうございます!とても分かりやすくて参考になります。 自分は、flatpickrを使ってるんですが ほんとは、flatpickrで日付を絞れたら嬉しいんですが、、、
jun68ykt

2019/11/18 07:53

どういたしまして。 > ほんとは、flatpickrで日付を絞れたら嬉しいんですが、、、 なるほどですね。であれば、flatpickrを使ってやりたいことを明確にして、またご質問されるとよいかと思います。
guest

0

てきとーに水曜日の日付を選んで、その特定の日付と一致したら選び直し、一致しなければ出力、とすればよろしい

投稿2019/11/18 05:58

y_waiwai

総合スコア88038

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

_cr

2019/11/18 07:43

ご回答ありがとうございます! 助かりました、、、
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問