
以下のプログラムは土日は無視されますが祝日も平日としてカウントダウンされてしまいます。
土、日、祝日を含まない平日のみをカウントダウンするプログラムを教えていただけますでしょうか?
<html>
<head>
<script language="JavaScript">
<!--
function countdown() {
var kyou = new Date();
var kinen = new Date("Sep 31, 2008 00:00:00");
// 目標日との差のミリ秒(の絶対値)
var tdiff = Math.abs(kinen.getTime() - kyou.getTime());
// 日数
var days = 0;
var mae;
if (kinen.getTime() > kyou.getTime()) {
// 目標日以前なら
mae = true;
// 曜日を取得(日曜が0、月曜が1、...、土曜が6)
var weekday = kyou.getDay();
while (tdiff > 0) {
if (weekday > 0 && weekday < 6) {
++days;
}
weekday = weekday != 6 ? weekday + 1 : 0;
tdiff -= (24 * 60 * 60 * 1000);
}
} else {
// 目標日以降(含む当日)なら
mae = false;
// 曜日を取得(日曜が0、月曜が1、...、土曜が6)
var weekday = kinen.getDay();
// 残りが1日未満になるまで繰り返す
// 元のプログラムがMath.ceilで切り上げを行っているため、
// それにあわせるための処置
while (tdiff > (24 * 60 * 60 * 1000)) {
if (weekday > 0 && weekday < 6) {
++days;
}
weekday = weekday != 6 ? weekday + 1 : 0;
tdiff -= (24 * 60 * 60 * 1000);
}
}
var meate="あ";
with(Math){
var kotoba;
if (mae) {
// 目標日前なら-1日する
--days;
kotoba = meate + "と " + days + "日 です。";
} else {
if (days == 0) {
kotoba = "も" + meate + "です!";
} else {
kotoba = meate + "から" + days + "日が過ぎました。";
}
}
}
document.write(kotoba);
}
//-->
</script>
</head>
<body>
<center><table border=2 bordercolor=00ffff cellpadding=5 cellspacing=0>
<tr bgcolor="#ffffff"><td bgcolor="#ffff80">
<script language="JavaScript">
<!--
countdown();
//-->
</script>
</td></tr>
</table></center>
</body>
</html>
ご教授の方を宜しくお願いします。

No.3ベストアンサー
- 回答日時:
自分にとってこれは難問でした。
はたして正確なのかもわからず、簡単な検証だけしました。(祝日は約10年先まで調べてからカウントしてます)ミスがなければ好いのですが・・・・。
これ以上は無理です!
<html>
<body>
今年の労働は後<span id="a"></span>日あります。;_;
<script>
window.onload=function(){document.getElementById('a').innerHTML=workdayCount(new Date(2008,12-1,31))};//1月が0なので1つ減る
function workdayCount(e_date){
var c=0;
var s=(new Date()).getTime();
var e=e_date.getTime();
var stp=24*60*60*1000;
var y=(new Date()).getFullYear();
var hdy=[];
for(var m=y+10;y<m;y++){
hdy[y*10000+101]='元旦';
hdy[y*10000+[109,108,114,113,112,111,110][dayCount(y+'/01/01')%7]]='成人の日';
hdy[y*10000+211] = '建国記念の日';
hdy[y*10000+((320.8431+0.242194*(y-1980))|0)-(((y-1980)/4)|0)]='春分の日';
hdy[y*10000+429] = '昭和の日';
hdy[y*10000+503] = '憲法記念日';
hdy[y*10000+504] = 'みどりの日';
hdy[y*10000+505] = '子供の日';
hdy[y*10000+[716,715,721,720,719,718,717][dayCount(y+'/07/01')%7]]='海の日';
hdy[y*10000+[916,915,921,920,919,918,917][dayCount(y+'/09/01')%7]]='敬老の日';
hdy[y*10000+((923.2488+0.242194*(y-1980))|0)-(((y-1980)/4)|0)]='秋分の日';
hdy[y*10000+[1009,1008,1014,1013,1012,1011,1010][dayCount(y+'/10/01')%7]]='体育の日';
hdy[y*10000+1103]='文化の日';
hdy[y*10000+1123]='勤労感謝の日';
hdy[y*10000+1223]='天皇誕生日';
for(var i=101;i<1232;i++){
if(hdy[y*10000+i]){
if(dayCount(y+'/'+((i/100)|0)+'/'+i%100)%7==0 && (hdy[y*10000+i+1])!='') {hdy[y*10000+i+1]='振替休日';i+=2;}
}
}
}
while(s<e){
var ss =new Date(s);
var chkdy=ss.getFullYear()*10000+(ss.getMonth()+1)*100+ss.getDate();
if(0<ss.getDay() && ss.getDay()<6 && hdy[chkdy]==undefined) {c++;}
s+=stp;
}
return c;
}
function serial(date_str){
return (dayCount(date_str)-dayCount('1899/12/31')).toFixed(6);
}
function dayCount(date_str){
var dy=date_str.split(/\/|-| |:/);for(var i=0;i<6;i++) dy[i]=dy[i]?dy[i]-0:0;
var tpy=dy[0]-1;
var d=tpy*365+(tpy/400|0)-(tpy/100|0)+(tpy/4|0)+[0,0,31,59,90,120,151,181,212,243,273,304,334][dy[1]]+dy[2]+(((!(dy[0]%4))^(!(dy[0]%100))^(!(dy[0]%400)))&(dy[1]>2));
var t=dy[3]/24+dy[4]/1440+dy[5]/86400;
return (d+t).toFixed(6);
}
</script>
</body>
</html>

No.2
- 回答日時:
祝日一覧データ
function dayCount(date_str){
var dy=date_str.split(/\/|-| |:/);for(var i=0;i<6;i++) dy[i]=dy[i]?dy[i]-0:0;
var tpy=dy[0]-1;
var d=tpy*365+(tpy/400|0)-(tpy/100|0)+(tpy/4|0)+[0,0,31,59,90,120,151,181,212,243,273,304,334][dy[1]]+dy[2]+(((!(dy[0]%4))^(!(dy[0]%100))^(!(dy[0]%400)))&(dy[1]>2));
var t=dy[3]/24+dy[4]/1440+dy[5]/86400;
return (d+t).toFixed(6);
}
var y=(new Date()).getFullYear();y=2007;
var hdy=[];
hdy[101]='元旦';
hdy[[109,108,114,113,112,111,110][dayCount(y+'/01/01')%7]]='成人の日';
hdy[211] = '建国記念の日';
hdy[((320.8431+0.242194*(y-1980))|0)-(((y-1980)/4)|0)]='春分の日';
hdy[429] = '昭和の日';
hdy[503] = '憲法記念日';
hdy[504] = 'みどりの日';
hdy[505] = '子供の日';
hdy[[716,715,721,720,719,718,717][dayCount(y+'/07/01')%7]]='海の日';
hdy[[916,915,921,920,919,918,917][dayCount(y+'/09/01')%7]]='敬老の日';
hdy[((923.2488+0.242194*(y-1980))|0)-(((y-1980)/4)|0)]='秋分の日';
hdy[[1009,1008,1014,1013,1012,1011,1010][dayCount(y+'/10/01')%7]]='体育の日';
hdy[1103]='文化の日';
hdy[1123]='勤労感謝の日';
hdy[1223]='天皇誕生日';
for(var i=101;i<1232;i++){
if(hdy[i]){
if(dayCount(y+'/'+((i/100)|0)+'/'+i%100)%7==0 && !hdy[i+1]) {hdy[i+1]='振替休日';i+=2;}
}
}
for(i=0,v=y+"\n";i<1232;i++){if(hdy[i]!=undefined) v+=i+'='+hdy[i]+'\n';}
alert(v);
No.1
- 回答日時:
Javascriptは祝日に対応していません。
ですから、「祝日一覧リスト」のようなものを作成し、
「現在の日付が祝日一覧リストに存在したら、その日はカウントしない」
という処理を土日判定付近に加えてください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
JavaScriptでテーブル内?に矢...
-
イラレでナンバリングする方法
-
画像のURLをコピーするブックマ...
-
javascriptで入力フォームに日...
-
$("body").height();と$("body"...
-
VSCODE[Python]の設定について
-
定積分の近似値を計算する関数c...
-
【乱数発生】 JavascriptからPe...
-
googleスプレッドシートのApps ...
-
vb.netでの記述方法について 以...
-
HTTPSのとき":"が"%3A"ではなく...
-
JavaScript window.openで開く...
-
functionから別のfunctionを実...
-
XMLでのAttributeを持ったNode...
-
idを使わずにonclickで自身の要...
-
javaで画像をランダム表示しつ...
-
jspからjavascriptの変数引継ぎ
-
jQuery text()で、<br>タグも取...
-
同じIDで定義した要素の配列を...
-
onchangeイベントを使ってspan...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C#OpenCv V4にのエラーに関する...
-
C#で、ContextMenuStripに動的...
-
ASP.NET MVCでObjectをjsに渡す
-
google apps scriptの終了のさせ方
-
ASP.NETのコントロールの値をJa...
-
JavaScriptで文字列の特定文字...
-
イベントが初めの一回しか起き...
-
GASでundefinedエラーが出ます
-
ローカルにあるファイルを検索...
-
翌月を取得するGASが分かりません
-
APIを使って埋め込んだグーグル...
-
javascriptでiframeのURL変更は?
-
ジェネレーターの作り方
-
cgiでポーリングして取得したデ...
-
var_dumpのdump意味はを知りた...
-
javascriptでテーブルに追加し...
-
シンプルなweb版スタンプラリー...
-
javascriptで複数キーワード検...
-
JavaScriptで、現在日時から100...
-
C# 演算 奇数と偶数 表現の仕方
おすすめ情報