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

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

新規登録して質問してみよう
ただいま回答率
85.50%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

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

Q&A

解決済

3回答

3708閲覧

datepickerを使ったカレンダーで一括選択不可にした曜日の特定日だけを選択可能にしたい

pecorino

総合スコア14

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

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

0グッド

0クリップ

投稿2019/01/23 23:43

編集2019/01/24 00:20

予約フォームを変更中です

フォーム自体は前任者からの引き継ぎで、最初から作ったわけではありません。
以下の方法で、定休日(日曜)は予約が取れないようにしましたが、
一括で日曜日は選択不可にしつつ、特定の1日だけ営業のため選択可能にする、といったことは可能でしょうか。

<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1/i18n/jquery.ui.datepicker-ja.min.js"></script>  $(function(){   $("#datepicker01").datepicker({    dateFormat: 'yy年mm月dd日' ,    minDate: '+2',    dateFormat: "yy/mm/dd",    maxDate: '+180',    beforeShowDay: function(day) {    var result;    var holiday = holidays[$.format.date(day, "yyyyMMdd")]    if (holiday) { result = [false]; } else {    switch (day.getDay()) {    case 0: // 日曜日を選択不可に    result = [false];    break;    default:    result = [true];    break;    }    }    return result;    }   });

その特定の1日に名前をつけて、

   switch (day.getDay()) {    case 0: // 日曜日を選択不可に    result = [false];    break;    default:    result = [true];    break;    }

この中↑に除外するように入れれば良いのではと思うものの答えにたどりつきません
超初心者の質問で非常に恐縮ですが
どなたか教えて頂けましたら幸いです
よろしくお願い致します。

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

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

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

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

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

m.ts10806

2019/01/24 00:11

タグにあるPHPはどのように関係しているのでしょうか。
m.ts10806

2019/01/24 00:12

またその「特定の日」はどのように決まるのでしょうか。
m.ts10806

2019/01/24 00:13

datepickerも幾つか種類があるのでプラグインの公式URLなどもあわせて質問本文にご提示ください。
pecorino

2019/01/24 00:22

PHPファイル内にあるため、一応でタグ付けいたしました 紛らわしければ申し訳ありません。 特定の日の決定にルールはなく、「この日だけ営業したい」というような形です。
m.ts10806

2019/01/24 00:37

そうですね。質問自体はphpとは関係なさそうです。 もちろん「その特定の日をPHPでajaxで取得する」というのでしたらそのように書いてあったほうがいいかもしれません。 特定の日がどこでどう設定されるというところが聞きたかったので。 「ひとまず特定の日についてはご自身で対応してもらう」前提で回答しますね。
guest

回答3

0

特定の日にちの情報をどのように持っているのか、わからなかったので途中までですが、
変数dayにカレンダーに表示する日にちが1日ずつ入ってくるので、以下のような分岐を行うことで可能です。

javascript

1case 0: // 日曜日を選択不可に 2 if (特定の日にちを判定する式) { 3 // 特定の日にちの場合こちらへ分岐 4 result = [true]; 5 } 6 else { 7 // 通常の日曜はこちらへ分岐 8 result = [false]; 9 } 10break;

投稿2019/01/24 00:38

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

pecorino

2019/01/24 00:59

ご回答ありがとうございます 参考にさせていっただき、もう少し頑張ってみます。 ご回答感謝いたします!!
pecorino

2019/01/24 05:02

最後のSE-studying-now様のコードを参考にさせていただきました。 単純で改造の少ない方法を教えて頂きありがとうございます こちらの方法でも動作するよう練習問題にさせていただきます! ありがとうございました。
guest

0

ベストアンサー

提示のコードからの推測での回答になります。検討違いでしたらご容赦ください。

まず、beforeShowDayの関数の返却値を格納している変数resultにtrueが設定されている場合に選択可、falseが設定されている場合に選択不可になると判断しました。
上記を前提に、switch文の「case 0」判定内に特定日であるか否かの判定を設け、特定日の場合にresultにtrueをそれ以外はfalseとすることで要件を満たせそうです。
ここで、特定日は複数日あることが想定されそうですので、特定日を格納する変数を配列で保持するとよいかと思います。

以下、サンプルコードです。

javascript

1beforeShowDay: function(day) { 2 var specificDays = ["20190127","20190203","20190217"]; 3 var result; 4 var holiday = holidays[$.format.date(day, "yyyyMMdd")]; 5 if (holiday) { 6 result = [false]; 7 } else { 8 switch (day.getDay()) { 9 case 0: // 日曜日 10 if (specificDays.includes($.format.date(day, "yyyyMMdd"))) { 11 // 特定日の場合は選択可能に 12 result = [true]; 13 } else { 14 // 特定日以外の日曜日を選択不可に 15 result = [false]; 16 } 17 break; 18 default: 19 result = [true]; 20 break; 21 } 22 } 23 return result; 24}

ちなみに、判定をswitchでしているところは今後も日曜限定であればif文でよい気がしましたが、最初に実装された方は今後の拡張として定休日が増えるかもと考えられてswitchでの実装としているのでは、と考えswitch文のままとしています。また、既に動いているものを修正する際は、修正による影響範囲を局所化する意味でも、あまり大きくコードを変更することは好ましくないと、個人的に考えます。

投稿2019/01/24 01:09

SE-studying-now

総合スコア351

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

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

m.ts10806

2019/01/24 02:56

確かに、元の実装の意図が明確でない以上は分岐部分の改修は愚策でしたね。失礼しました。 (引継ぎって細かいところまでできないことが多いので難しいですね)
pecorino

2019/01/24 04:57 編集

SE-studying-nowさま ご回答ありがとうございます! こちらのコードで思ったとおりの動作になりました。 コードの内容も理解できました。 お察しの通り、定休日やその他も選択不可の設定を増やす可能性があり (特に今年は特別なGWなどもあり) ここで単純に日数を増やしていけるととてもありがたいです。 ご回答・ご教示感謝いたします!
guest

0

簡単にするならこうですね。

js

1 result = [true]; 2   switch (day.getDay()) { 3 4   case 0: // 日曜日を選択不可に 5 if(day != {特定の日}){ 6    result = [false]; 7 } 8   break; 9

falseにすると選択不可になるのでしたら、「その日以外」とすれば良いです。
ただ、曜日判定で日曜だけを選択不可にするような感じなのでswitchじゃなくてもいい気もします。

js

1result = [true]; 2 3if(day.getDay() === 0 && day != {特定の日}){ 4 result = [false]; 5}

投稿2019/01/24 00:40

m.ts10806

総合スコア80765

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

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

pecorino

2019/01/24 00:59

早々にありがとうございます!! こちらを参考に頑張ってみます。 また詰まったらお伺いするかもしれません ご回答感謝いたします!!
m.ts10806

2019/01/24 01:01

ここは発想の問題と思います。 「日曜日は選択できないけど特定の日曜は選択できるように」は「特定の日を除いた日曜は選択できない」と同じです。 プログラムでやりやすいやり方を考えると良いです。
pecorino

2019/01/24 05:00

何度もコメントいただきありがとうございます! 後のSE-studying-now様のコードを参考にさせていただきました。 発想の問題、理解しました 望む動作をするのに、やり方は色々あるということですね よい練習になります。 書き込みすぐにご回答いただきありがとうございました!
m.ts10806

2019/01/24 06:25

というより「逆の発想をしたほうがプログラムを組みやすいことがある」ですかね。
m.ts10806

2019/01/24 06:25

解決されたようで何よりです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問