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

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

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

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

Q&A

1回答

2490閲覧

javascriptで、「最短営業日+1日後」を表示したい。

cherryz

総合スコア17

JavaScript

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

0グッド

0クリップ

投稿2021/06/30 12:53

こんにちは。

出荷日とお届け予定日を表示するバナーを作りたいのですが、
お届け予定日の方をどう作ればよいか、教えてください。

「出荷日」(最短営業日、15時締め)は設定済です。
dispDate2W(0,15)

「お届け予定日」が、現在は(第2営業日、第3営業日)
dispDate2W(1,15)
dispDate2W(2,15)

にしておりますが、
厳密には「出荷日の翌日」なので、
dispDate2W(0,15) の翌日

にしたいのです。
例えば、出荷日が金曜日だと、お届け日は月曜日ではなく、土曜(翌日)・日曜日(翌々日)になります。

どうぞよろしくお願いいたします。

JavaScript

1 2<SCRIPT language="JavaScript"> 3<!-- 4 5/* ------------------------------------------------------------------- 6 出荷日計算JavaScript「出荷日田中ちゃん」ver 1.01 (c) tanaka-chan 7-------------------------------------------------------------------- */ 8 9thisDay = new Date(); 10timeStamp = thisDay.getTime(); 11myMonth = thisDay.getMonth() + 1; 12myDate = thisDay.getDate(); 13myHours = thisDay.getHours(); 14myDay = thisDay.getDay(); 15myWeekTbl = new Array( "日","月","火","水","木","金","土" ); 16 17function isHoliday (year, month, date, nday) { 18 nofw = Math.floor((date - 1) / 7) + 1; 19 shunbun = Math.floor(20.8431+0.242194*(year-1980)-Math.floor((year-1980)/4)); 20 syubun = Math.floor(23.2488+0.242194*(year-1980)-Math.floor((year-1980)/4)); 21 if (month == 8 && date >= 13 && date <= 16) { return 1; } // 臨時休業日~日 22 if (month == 5 && date >= 1 && date <= 2) { return 1; } // 臨時休業日2 23 if (month == 1 && date == 1) { return 1; } // 元旦 24 if (month == 1 && nday == 1 && nofw == 2) { return 1; } // 成人の日 25 if (month == 2 && date == 11) { return 1; } // 建国記念の日 26 if (month == 3 && date == shunbun) { return 1; } // 春分の日 27 if (month == 4 && date == 29) { return 1; } // みどりの日 28 if (month == 5 && date >= 3 && date <= 5) { return 1; } // 憲法記念日~こどもの日 29 if (month == 7 && nday == 1 && nofw == 3) { return 1; } // 海の日 30 if (month == 9 && nday == 1 && nofw == 3) { return 1; } // 敬老の日 31 if (month == 9 && date == syubun) { return 1; } // 秋分の日 32 if (month == 9 && nday == 2 && nofw == 3 33 && date+1 == syubun) { return 1; } // 9月第3火曜の翌日が秋分の日→国民の休日 34 if (month == 10 && nday == 1 && nofw == 2) { return 1; } // 体育の日 35 if (month == 11 && date == 3) { return 1; } // 文化の日 36 if (month == 11 && date == 23) { return 1; } // 勤労感謝の日 37 if (month == 12 && date == 23) { return 1; } // 天皇誕生日 38 if (nday == 0) { return 2; } // 日曜 39 if (nday == 6) { return 2; } // 土曜 40 return 0; 41} 42 43 44 45function dispDateW () { 46 return dispDate(1); 47} 48 49function dispDate1W (h) { 50 return dispDate1(h, 1); 51} 52 53function dispDate2W (n, h) { 54 return dispDate2(n, h, 1); 55} 56 57} 58function dispDate (w) { 59 return dateFormat(myMonth,myDate,myDay,w); 60} 61 62function dispDate1 (h, w) { 63 return dispDate2(0, h, w); 64} 65 66function dispDate2 (n, h, w) { 67 var i = 0; 68 while (i <= n) { 69 thisDay.setTime(timeStamp + (1000*60*60*24 * i)); 70 myYear2 = thisDay.getFullYear(); 71 myMonth2 = thisDay.getMonth() ; 72 myDate2 = thisDay.getDate(); 73 myDay2 = thisDay.getDay(); 74 if (isHoliday(myYear2,myMonth2,myDate2,myDay2) == 0 && i == 0 && h <= myHours) { n++; } // 翌日扱い 75 if (isHoliday(myYear2,myMonth2,myDate2,myDay2) >= 1){ n++; } // 休日 76 if (isHoliday(myYear2,myMonth2,myDate2,myDay2) == 1 && myDay2 == 0){ n++; } // 振替休日 77 i++; 78 } 79 return dateFormat(myMonth2,myDate2,myDay2,w); 80} 81 82function dateFormat (month, date, week, w) { 83 if (w == 1) { return month+"月"+date+"日("+myWeekTbl[week]+")"; } 84 else { return month+"月"+date+"日"; } 85} 86 87// --> 88</SCRIPT> 89 90 91<!-- 1列 透過背景なし --> 92<div class="original_banner2"> 93<div class="original_banner_box"> 94<div class="banner_data"> 95<div class="inner_banner_data"> 96<span class="sbanner_title"> 97 98 99当日発送は15時まで・15時以降は翌日以降発送となります。<br> 100ただいまご注文されると、お急ぎ便で<br> 101 102<span class="banner_title"> 103<SCRIPT language="JavaScript"><!-- 104document.write(dispDate2W(0,15)); 105// --></SCRIPT> 発送、</span></span> 106 107<font color="#D90000"><span class="switch" "banner_desc"><b>関西方面</b></span><span class="switch"> 108<span class="banner_title">翌日 109<SCRIPT language="JavaScript"><!-- 110document.write(dispDate2W(1,15)) + 1; 111// --></SCRIPT></span></span></font> 112 113<font color="#D90000"><span class="switch" "banner_desc"><b>関東方面</b></span><span class="switch"> 114<span class="banner_title">翌々日 115<SCRIPT language="JavaScript"><!-- 116document.write(dispDate2W(2,15)); 117// --></SCRIPT></span></span></font> 118 119<font color="#D90000"><span class="switch" "banner_desc"><b>北海道・沖縄</b></span><span class="switch"> 120<span class="banner_title">3日後 121<SCRIPT language="JavaScript"><!-- 122document.write(dispDate2W(3,15)); 123// --></SCRIPT>以降</span></span></font> 124 125<span class="banner_desc"> 126 <font size=2.5>のお届け予定です。</font><br><br><b><font size=2.5><i class="fas fa-exclamation-triangle"></i>これ以前の日付を選択された場合、後ほどお届け日修正のご連絡をさせていただきます。<br><br><i class="fas fa-exclamation-triangle"></i>季節・繁忙期など例外がございます。詳しくはお問い合わせください。</font></b> 127</span> 128</div> 129</div> 130</div></div>

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

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

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

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

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

kei344

2021/06/30 13:10

「何」が「どのように」わからないのか、コードのどの部分で詰まっているのかなどを、具体的に記述されたほうが回答を得られやすいと思います。
cherryz

2021/06/30 18:09

アドバイスありがとうございます。
guest

回答1

0

dispDate2() の土日祝を飛ばしている部分をなくしたものを作れば良いかと思います。

投稿2021/06/30 15:48

yh1224

総合スコア653

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

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

cherryz

2021/06/30 18:09

ありがとうございます!やってみましたが、 「出荷日」(最短営業日・・・土日祝日飛ばす) dispDate2W(0,15) の翌日・翌々日としたいところ、 dispDate2()  の土日祝を飛ばしたものだと、「本日」の翌日・翌々日になってしまいます。 例えば、木曜注文なら良いのですが(発送日 金曜、お届け 土・日)、 金曜注文だと、「発送日」月曜・「お届け予定日」日・月となる感じです。 この場合に、「発送日」月曜・「お届け予定日」火・水にしたいのです。
yh1224

2021/07/01 22:47

なるほどです、理解しました。 そうすると、先に出した「出荷日」を基準にして、そこから「翌日」「翌々日」を計算するのが良いのではないかと思います。たとえば dispDate2() 内で「本日」にあたる thisDay を引数で渡すようにするなど。 また、現在の関数は日付の計算と文字列への変換までしておりちょっと使い回しにくいと思うので、以下のように関数を分けると良いかと思います。 - 「本日」から「出荷日」を計算する。(Date 型) - 「出荷日」から「お届け予定日」を計算する。(Date 型→Date 型) - Date 型を文字列にする。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問