予約フォームを変更中です
フォーム自体は前任者からの引き継ぎで、最初から作ったわけではありません。
以下の方法で、定休日(日曜)は予約が取れないようにしましたが、
一括で日曜日は選択不可にしつつ、特定の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;
}
この中↑に除外するように入れれば良いのではと思うものの答えにたどりつきません
超初心者の質問で非常に恐縮ですが
どなたか教えて頂けましたら幸いです
よろしくお願い致します。
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
+2
特定の日にちの情報をどのように持っているのか、わからなかったので途中までですが、
変数dayにカレンダーに表示する日にちが1日ずつ入ってくるので、以下のような分岐を行うことで可能です。
case 0: // 日曜日を選択不可に
if (特定の日にちを判定する式) {
// 特定の日にちの場合こちらへ分岐
result = [true];
}
else {
// 通常の日曜はこちらへ分岐
result = [false];
}
break;
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
checkベストアンサー
+1
提示のコードからの推測での回答になります。検討違いでしたらご容赦ください。
まず、beforeShowDayの関数の返却値を格納している変数resultにtrueが設定されている場合に選択可、falseが設定されている場合に選択不可になると判断しました。
上記を前提に、switch文の「case 0」判定内に特定日であるか否かの判定を設け、特定日の場合にresultにtrueをそれ以外はfalseとすることで要件を満たせそうです。
ここで、特定日は複数日あることが想定されそうですので、特定日を格納する変数を配列で保持するとよいかと思います。
以下、サンプルコードです。
beforeShowDay: function(day) {
var specificDays = ["20190127","20190203","20190217"];
var result;
var holiday = holidays[$.format.date(day, "yyyyMMdd")];
if (holiday) {
result = [false];
} else {
switch (day.getDay()) {
case 0: // 日曜日
if (specificDays.includes($.format.date(day, "yyyyMMdd"))) {
// 特定日の場合は選択可能に
result = [true];
} else {
// 特定日以外の日曜日を選択不可に
result = [false];
}
break;
default:
result = [true];
break;
}
}
return result;
}
ちなみに、判定をswitchでしているところは今後も日曜限定であればif文でよい気がしましたが、最初に実装された方は今後の拡張として定休日が増えるかもと考えられてswitchでの実装としているのでは、と考えswitch文のままとしています。また、既に動いているものを修正する際は、修正による影響範囲を局所化する意味でも、あまり大きくコードを変更することは好ましくないと、個人的に考えます。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
+1
簡単にするならこうですね。
result = [true];
switch (day.getDay()) {
case 0: // 日曜日を選択不可に
if(day != {特定の日}){
result = [false];
}
break;
falseにすると選択不可になるのでしたら、「その日以外」とすれば良いです。
ただ、曜日判定で日曜だけを選択不可にするような感じなのでswitchじゃなくてもいい気もします。
result = [true];
if(day.getDay() === 0 && day != {特定の日}){
result = [false];
}
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.13%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
質問への追記・修正、ベストアンサー選択の依頼
m.ts10806
2019/01/24 09:11
タグにあるPHPはどのように関係しているのでしょうか。
m.ts10806
2019/01/24 09:12
またその「特定の日」はどのように決まるのでしょうか。
m.ts10806
2019/01/24 09:13
datepickerも幾つか種類があるのでプラグインの公式URLなどもあわせて質問本文にご提示ください。
pecorino
2019/01/24 09:22
PHPファイル内にあるため、一応でタグ付けいたしました
紛らわしければ申し訳ありません。
特定の日の決定にルールはなく、「この日だけ営業したい」というような形です。
m.ts10806
2019/01/24 09:37
そうですね。質問自体はphpとは関係なさそうです。
もちろん「その特定の日をPHPでajaxで取得する」というのでしたらそのように書いてあったほうがいいかもしれません。
特定の日がどこでどう設定されるというところが聞きたかったので。
「ひとまず特定の日についてはご自身で対応してもらう」前提で回答しますね。