通販サイトで下記のように出荷日をお知らせする「出荷日田中ちゃん」というコードがあります。
// JavaScript Document 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 (nday == 0) { return 2; } // 日曜 return 0; } function dispDateW () { return dispDate(1); } function dispDate1W (h) { return dispDate1(h, 1); } function dispDate2W (n, h) { return dispDate2(n, h, 1); } 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 dateFormat (month, date, week, w) { if (w == 1) { return month+"月"+date+"日("+myWeekTbl[week]+")"; } else { return month+"月"+date+"日"; } } // --> </SCRIPT> <SCRIPT language="JavaScript"> <!-- document.write(dispDate2W(0,14)); // --></SCRIPT>
上記の場合、
14時過ぎると出荷日+1、
1月1日が休みで出荷日+1、
また日曜日も出荷日+1
というようなコードになってます。
その中で
土曜日が14:00以降になると
出荷日が日曜日飛んで月曜日になってしまうのですが
土曜日17:00までは日曜日出荷もしたいと考えてます。
考えたのが
function isHolidayに下記を追記
if(myHours >= 17){ if (nday == 0) { return 1; } // 日曜 }
なのですが、ndayの値に6や0が入ってきて
正確に求められませんでした。
どのようにすれば解決できるでしょうか?
質問をまとめると
月~金は14:00までは当日の日付、それ以降は翌日の日付
土曜日は14:00までは当日の日付、14:00~17:00までは翌日の日付、それ以降は月曜日の日付
日曜日は休日
にしたいです。
追記
テストのため、火曜日を休みと想定して下記のように記述しましたが
現在時刻で10/13水になってしまう。
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 && date==2){return 1;} //元旦 if(month==1 && date==3){return 1;} //元旦 if(myHours < 17){ if (nday == 2) { return 1; } // 日曜 } if (nday == 2) { return 1; } // 日曜 return 0; }
回答1件
あなたの回答
tips
プレビュー