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

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

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

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

Q&A

解決済

2回答

2974閲覧

Javascriptでの日付計算について

syu_2016

総合スコア12

JavaScript

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

0グッド

0クリップ

投稿2016/04/12 00:34

編集2016/04/12 01:55

発送予定日を自動計算です。
最終的に日時(月/日)と曜日を分けて出力したいと思っております。
現状:日時(月/日)と曜日がセットで出力されてしまいます。。。
アドバイスいただけないでしょうか??

素人ですのでお手柔らかにお願いします。。。

<SCRIPT language="JavaScript"> thisDay = new Date(); timeStamp = thisDay.getTime(); myMonth = thisDay.getMonth() + 1; myDate = thisDay.getDate(); myHours = thisDay.getHours(); myDay = thisDay.getDay(); myWeekTbl = new Array( "日","月","火","水","木","金","土" ); function isHoliday (year, month, date, nday) { nofw = Math.floor((date - 1) / 7) + 1; shunbun = Math.floor(20.8431+0.242194*(year-1980)-Math.floor((year-1980)/4)); syubun = Math.floor(23.2488+0.242194*(year-1980)-Math.floor((year-1980)/4)); if (month == 1 && date == 1) { return 1; } // 元旦 if (month == 1 && nday == 1 && nofw == 2) { return 1; } // 成人の日 if (month == 2 && date == 11) { return 1; } // 建国記念の日 if (month == 3 && date == shunbun) { return 1; } // 春分の日 if (month == 4 && date == 29) { return 1; } // みどりの日 if (month == 5 && date >= 3 && date <= 5) { return 1; } // 憲法記念日~こどもの日 if (month == 7 && nday == 1 && nofw == 3) { return 1; } // 海の日 if (month == 9 && nday == 1 && nofw == 3) { return 1; } // 敬老の日 if (month == 9 && date == syubun) { return 1; } // 秋分の日 if (month == 9 && nday == 2 && nofw == 3 && date+1 == syubun) { return 1; } // 9月第3火曜の翌日が秋分の日→国民の休日 if (month == 10 && nday == 1 && nofw == 2) { return 1; } // 体育の日 if (month == 11 && date == 3) { return 1; } // 文化の日 if (month == 11 && date == 23) { return 1; } // 勤労感謝の日 if (month == 12 && date == 23) { return 1; } // 天皇誕生日 if (nday == 0) { return 2; } // 日曜 if (nday == 6) { return 2; } // 土曜 return 0; } function dispDate (w) { return dateFormat(myMonth,myDate,myDay,w); } function dispDate1 (h, w) { return dispDate2(0, h, w); } function dispDate2 (n, h, w) { var i = 0; while (i <= n) { thisDay.setTime(timeStamp + (1000*60*60*24 * i)); myYear2 = thisDay.getFullYear(); myMonth2 = thisDay.getMonth() + 1; myDate2 = thisDay.getDate(); myDay2 = thisDay.getDay(); if (isHoliday(myYear2,myMonth2,myDate2,myDay2) == 0 && i == 0 && h <= myHours) { n++; } // 翌日扱い if (isHoliday(myYear2,myMonth2,myDate2,myDay2) >= 1){ n++; } // 休日 if (isHoliday(myYear2,myMonth2,myDate2,myDay2) == 1 && myDay2 == 0){ n++; } // 振替休日 i++; } return dateFormat(myMonth2,myDate2,myDay2,w); } function dispDateW () { return dispDate(1); } function dispDate1W (h) { return dispDate1(h, 1); } function dispDate2W (n, h) { return dispDate2(n, h, 1); } function dateFormat (month, date, week, w) { if (w == 1) { return month+"/"+date +"("+myWeekTbl[week]+")"; } else { return month+"/"+date +"("+myWeekTbl[week]+")"; } } // --> </SCRIPT>

■追記です---------------------------------------------------------------------

dispDate1W dispDate2Wを現在出力しております。

<script type="text/javascript"> document.getElementById("ClockArea01").innerHTML = "<span class='txt01'>" + (dispDate1W(19))+ "</span><span class='txt01'> 12:00</span>" ; document.getElementById("ClockArea02").innerHTML = "<span class='txt02'>" + (dispDate2W(2,19))+ "</span>" ; </SCRIPT>

以下の部分で月/日/曜日がまとまっております。

function dateFormat (month, date, week, w) {
if (w == 1) { return month+"/"+date +"("+myWeekTbl[week]+")"; }
else { return month+"/"+date +"("+myWeekTbl[week]+")"; }
}

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

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

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

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

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

kei344

2016/04/12 01:31

コードはコードブロックにまとめてください。
ItoTomonori

2016/04/12 01:46 編集

どこの出力部分を、修正したいのでしょうか?出力系の関数が、複数実装されているように見えます。
syu_2016

2016/04/12 01:52

dispDate1W dispDate2Wを現在出力しております。 <script type="text/javascript"> document.getElementById("ClockArea01").innerHTML = "<span class='txt01'>" + (dispDate1W(19))+ "</span><span class='txt01'> 12:00</span>" ; document.getElementById("ClockArea02").innerHTML = "<span class='txt02'>" + (dispDate2W(2,19))+ "</span>" ; </SCRIPT> 以下の部分で月/日/曜日がまとまっております。 function dateFormat (month, date, week, w) { if (w == 1) { return month+"/"+date +"("+myWeekTbl[week]+")"; } else { return month+"/"+date +"("+myWeekTbl[week]+")"; } }
kei344

2016/04/12 01:54

ここで返信せずに、質問文に追記ください。
ItoTomonori

2016/04/12 01:55

そこまで理解されているなら、dateFormat、dispDateX、を書き換える?だけという所まで理解されているかと思いますが・・・?
suzukis

2016/04/12 01:59

コードの部分は、```(バッククオート3つ)の行で囲むと見やすくなります。範囲選択して、'</>'のボタンでもよいです
Lhankor_Mhy

2016/04/12 08:22

質問からずれますが、javascriptでの時間表示はローカルでの時刻設定によります。たとえば実際には19時を過ぎているのに顧客PCの時計が遅れていたため、発送予定日が1日前にずれる、ということがあり得ます。 日時表示の誤記がトラブルの原因になりそうでしたら、サーバの時刻を取得して表示することをお勧めします。
guest

回答2

0

始めの7行で既に望む結果は得られているように読めます。

JavaScript

1thisDay = new Date(); 2timeStamp = thisDay.getTime(); 3myMonth = thisDay.getMonth() + 1; 4myDate = thisDay.getDate(); 5myHours = thisDay.getHours(); 6myDay = thisDay.getDay(); 7myWeekTbl = new Array( "日","月","火","水","木","金","土" );

下記APIについて調べる事をお勧めします。

Re: syu_2016 さん

投稿2016/04/12 02:03

think49

総合スコア18162

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

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

syu_2016

2016/04/12 02:30

申し訳ありません。質問が間違っておりました。 したいことをまとめましたのでアドバイスいただけたら幸いです。 ■例:出力したい内容 A箇所.4/12(火)  B箇所.4/14(木) ①現在時刻が19時までは、A箇所が当日、B箇所は当日から2日後としたい ②現在時刻が19時以降は、A箇所が翌日、B箇所は当日から3日後としたい ③A箇所が土日祝日の場合は、B箇所は翌営業日の日付に設定したい ※A箇所、B箇所共に、(月/日) + (曜日)といったように別々にしたものを足して出力したい 何卒、宜しくお願いします。
think49

2016/04/12 03:05

希望する動作を漠然と書かれても困るのですが、日付を2/3日ずらす部分がわからないのでしょうか。 86400000 を加算すれば1日後になるのでその仕組みを利用してください。
guest

0

ベストアンサー

予想ですが、下記のように表示させたいという事でしょうか。

HTML

1<span class='txt01'>4/13</span><span class='some'> (水)</span><span class='txt01'> 12:00</span>

もしそれであれば、出力部分を置換してしまうのが手かもしれませんね。

JavaScript

1// (dispDate1W(19)) ← この部分に replace を追加する 2 (dispDate1W(19)).replace( '(', '</span><span class="some">(' )

小手先の修正を行う事で思った通りに表示されると思いますが、今後のメンテナンスコスト(後任が複雑すぎるコードに悩まされる時間を含めたコスト)軽減のため、書き直した方が良いですよ。

投稿2016/04/13 15:10

kei344

総合スコア69400

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

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

syu_2016

2016/04/13 23:49

ありがとうございます!助かりました。希望通り解決できました。今後ともよろしくお願いします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問