簡単なECサイトを作るために、勉強をしているものです。質問というか改善点などを教えて頂きたく今回質問させてください。
現在発注関連でお届け日を自動でWEBサイトに表示するJSを考えています。下記がコードです。
<div id="time"></div> <div id="todoke_day"></div> <script type="text/javascript"> setInterval(function(){ var date = new Date(); var month = ('0' + (date.getMonth() + 1)).slice(-2); var day = ('0' + date.getDate()).slice(-2); var hour = ('0' + date.getHours()).slice(-2); var minute = ('0' + date.getMinutes()).slice(-2); var second = ('0' + date.getSeconds()).slice(-2); var mili = ('0' + date.getMilliseconds()).slice(-2); var str ='<span class="timer-ttl">ただ今の注文</span><span class="today">'+month+'/'+day+'</span><span class="timer">'+hour+':'+minute+':'+second+':'+mili+'</span>'; document.getElementById("time").innerHTML = str; },0) var date2 = new Date(); var flagDay = new Date(date2.getFullYear(), date2.getMonth() + 1, 0).getDate(); var flagHour = date2.getHours(); var today = date2.getDate(); var month = date2.getMonth()+1; var today = date2.getDate(); if (today < flagDay){//現在が月末ではない if(today+2 <= flagDay) {//19時過ぎたときの届け日が月末を超えないとき if(flagHour < 19){ console.log(today); var msg = month+"/"+(today+1); } else if (flagHour > 19) { var msg = month+"/"+(today+2); } } else if(today+2 > flagDay){//19時過ぎたときの届け日が月末を超えるとき if(flagHour < 19){ var msg = month+"/"+(today+1); } else if (flagHour > 19) { var msg = date2.setMonth(dates.getMonth()+1)+"/"+date2.setDate(1); } } } else if(today = flagDay){//現在が月末の時 if(flagHour < 19){ var msg = date2.setMonth(dates.getMonth()+1)+"/"+date2.setDate(1); } else if (flagHour > 19) { var msg = (date2.setMonth(dates.getMonth()+1)+1)+"/"+(date2.setDate(1)+1); } } document.getElementById("todoke_day").innerHTML = msg; </script>
自分で書いていて物凄くわかりづらいコードだと思います。概要を説明します。
id=timeには常に現在の日付と時間を表示しています。時間はミリ秒まで表示してデジタル時計のような雰囲気を出したいと思っています。
問題はid=todoke_dayに表示するJSです。ここには現在の日付の次の日を表示するようにします。ただここで条件があります。
①19時を超えるまでは、次の日を表示。
②19時を超えたら、2日後を表示する。
例で言いますと、今日が25日なら19時までは26日を表示し、19時を超えたら27日を表示したいと思っています。
これは配送の締め切り時間でこのようにしています。
問題は、次の日を表示するときに月がかわってしまうときです。11月の月末は30日というの取得することはできました。これを判定に使って、月がかわったときを上手く表示しようと思いました。
このコードの改善点があれば、教えて頂きたいと思います。まだ動作の確認はすべて終わってないですが、もっとシンプルなやり方があるのではないかと、模索中です。お力をお貸しください。
追記 下記のようにコードを変更しました。教えて頂きありがとうございます。
<div id="time"></div> <div id="todoke_day"></div> <script type="text/javascript"> setInterval(function(){ var date = new Date(); var month = ('0' + (date.getMonth() + 1)).slice(-2); var day = ('0' + date.getDate()).slice(-2); var hour = ('0' + date.getHours()).slice(-2); var minute = ('0' + date.getMinutes()).slice(-2); var second = ('0' + date.getSeconds()).slice(-2); var mili = ('0' + date.getMilliseconds()).slice(-2); var str ='<span class="timer-ttl">ただ今の注文</span><span class="today">'+month+'/'+day+'</span><span class="timer">'+hour+':'+minute+':'+second+':'+mili+'</span>'; document.getElementById("time").innerHTML = str; },0); function format_date(d){ return (d.getMonth()+101).toString().substr(1,2)+"/"+(d.getDate()+100).toString().substr(1,2); } var d=new Date(); var hour = d.getHours(); console.log('時間:'+hour); if (hour < 19){ d.setDate(d.getDate()+1); var msg = format_date(d); } else if ( hour >= 19) { d.setDate(d.getDate()+2); var msg = format_date(d); } document.getElementById("todoke_day").innerHTML = msg; </script>
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/11/25 01:56
2016/11/25 03:46
2016/11/25 04:06
2016/11/25 04:14
2016/11/25 05:51
2016/11/25 05:57
2016/11/25 06:05