質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.35%
プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

JavaScript

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

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

Q&A

解決済

2回答

2331閲覧

【JavaScript】来月の土曜日と日曜日の日付(月日)をすべて取得したい

KentaroxKondo

総合スコア12

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

JavaScript

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

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

0グッド

1クリップ

投稿2021/05/06 12:29

JavaScript でプログラミングの勉強を初めて2週間ほどの初心者です。

職場で、翌月の自分の休日を一気に出力してメールしたい、というシチュエーションを想像していただきたいです!

私は土曜日日曜日が常に休みなので、例えば以下のような状態を自動算出するボタンを作成するとします。


来月の私の休日は以下となります。

◯/◯(土)
◯/◯(日)

◯/◯(土)
◯/◯(日)

◯/◯(土)
◯/◯(日)

◯/◯(土)
◯/◯(日)


翌月初日の日付とその曜日を取得して、初日の曜日が平日(getDay()の数値が1〜5)であれば次の土曜日の日付となるようにif文で足し算を行い、取得できた翌月最初の土曜日もしくは日曜日の日付を基準として、のこりの週の土日も力技でひたすらに+7の足し算をする・・・という発想で関数をつくりましたが、この方法だと月の最後らへんで日付が「6/34」など、存在しない数にまで膨れ上がってしまいました。翌々月になる手前でストップさせる方法も思い浮かびません。

そもそも、力技でやりすぎなのか、コードがあまりにも膨大になってしまったので、根本的なアプローチが間違っているのではないかと心配になりました。さすがに非効率だと感じながら作業をしており、解決の糸口が全く見えない状態に陥りました・・・。

翌月の、土曜日と日曜日の日付をすべて取得して出力するためには、みなさんでしたらどのような方法を用いられるでしょうか?

たくさん記述したコードは職場に置いてきてしまったので、申し訳ございませんが割愛させていただきます泣

他力本願な依頼になってしまい申し訳ございませんが、ご回答を心の底からお待ちしておりますm(._.)m

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

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

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

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

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

y_waiwai

2021/05/06 12:55

その膨大となったコードを提示しましょう
takasima20

2021/05/06 13:32

翌月の最終日を用意できたら制御できんじゃね?
KentaroxKondo

2021/05/10 06:06

>皆様 情報が不足した未熟な質問にも目を通していただきありがとうございました。 本件は皆様のお助けにより「解決済」となりました! 当たり前ですが、今後は極力コードを提示するよう心がけます^^; 有益なヒントもいただきまして、ありがとうございました! 今後ともぜひよろしくお願いいたしますm(._.)m
guest

回答2

0

最近はこういうのも使えるようですね。
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat
Intl.DateTimeFormat オブジェクトは、
言語に応じた日付と時刻の書式化を可能にするオブジェクトのためのコンストラクターです。

js

1const options = { weekday: 'short', month: 'numeric', day: 'numeric' }; 2const formatter = new Intl.DateTimeFormat('ja-JP-u-ca-japanese', options); 3 4let chkday = new Date(); 5const nextMonth = chkday.getMonth() + 1; // ※ 1月は 0 6chkday.setMonth(nextMonth); 7for (let day = 1; day <= 31; day++) { 8 chkday.setDate(day); 9 if (chkday.getMonth() > nextMonth) break; 10 document.write(formatter.format(chkday) + "<br />"); 11} 12

回答にはなってませんが、これで、

6/1(火)
6/2(水)
6/3(木)
……
6/29(火)
6/30(水)

投稿2021/05/06 16:00

編集2021/05/06 16:01
FromMZ1500

総合スコア496

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

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

KentaroxKondo

2021/05/10 06:02

FromMZ1500様 早急にご回答いただいたのにもかかわらず、返信が遅くなり申し訳ございませんでした。 存在しない日付まで突き抜けないようにする工夫の方法をご教示いただきありがとうございます! まだまだ初心者で右も左もわからない状況ですが、ネットで優れた知識のある方に教えていただける場があり嬉しいです。 極力自力で頑張りたいですが、また質問させていただく際にはぜひともよろしくお願いいたしますm(._.)m
guest

0

ベストアンサー

javascript

1const d=new Date(); 2d.setDate(1); 3d.setMonth(d.getMonth()+1); 4const youbi=d.getDay(); 5d.setMonth(d.getMonth()+1); 6d.setDate(0); 7const lastday=d.getDate(); 8const yasumi=Array(lastday).fill(null).map((x,y)=>[`${d.getMonth()+1}/${(y+1)}(${{0:"日",1:"月",2:"火",3:"水",4:"木",5:"金",6:"土"}[(y+youbi)%7]})`,(y+youbi)%7]).filter(x=>x[1]%6==0).map(x=>x[0]); 9console.log(yasumi);

投稿2021/05/06 13:02

yambejp

総合スコア116724

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

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

KentaroxKondo

2021/05/10 05:56

yambejp様 情報が不十分な質問にも早急にご回答いただきまして、ありがとうございました!また、返信が遅くなり申し訳ございません。いただいた式をそのまま活用させていただき、見事に動作することを確認いたしました。 プログラミング初心者で、まったく見かけたことのない式が含まれておりましたが、Arrayやfill、filter、map、その他引数を複数で活用する方法など、頑張って調べてみて、コツを掴みたいと思います。 今後ともぜひご教示いただければ幸いです。よろしくお願いいたします!m(._.)m
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問