created and maintained by tokd
HTMLApplication
HTA版世界時計
菊池さんのJavaScript版サマータイム対応
世界時計を参考に作成。tclock の左クリックに割り当てて使ってる。
海外との電話会議やテレビ会議のスケジュール確認に便利なように、
予定日時を指定できるようにした。
エディタ等を使って下記スクリプトに拡張子 .hta をつけて保存し、
同じディレクトリに以下のファイルを置く。
- http://www.adachi-shihoshoshi.com/update/jkl-calendar_sp1.1.js
- http://www.h3.dion.ne.jp/~sakatsu/HolidayChk.js
ウィンドウサイズや対象都市・タイムゾーンの変更は、
適宜スクリプトを修正すること。なお、動作確認は IE6/8 のみ。
<!-- Written by tokd for World Time Clock HTA 2009/5/22 --> <html> <head> <title>World Time Clock</title> <script type="text/javascript" src="jkl-calendar_sp1.1.js" charset="Shift_JIS"></script> <script type="text/javascript" src="HolidayChk.js" charset="Shift_JIS"></script> <script> var x = 410; var y = 220; while (true) { try { resizeTo(x, y); moveTo((screen.width-x) / 2, (screen.height-y) / 2); break; } catch (e) {} } var cal1 = new JKL.Calendar("calid", "formid", "colname"); function adjust(select) { var cal_d = new Date(); if (select) { cal_d.setTime(Date.parse(document.getElementById("colname").value) + document.getElementById("p_hour").selectedIndex * 3600000); } var year = cal_d.getYear(); if (year < 2000) { year += 2000; } var mon = cal_d.getMonth()+1; if (mon < 10) { mon = "0" + mon; } var date = cal_d.getDate(); if (date < 10) { date = "0" + date; } document.getElementById("colname").value = year + "/" + mon + "/" + date; document.getElementById("p_hour").selectedIndex = cal_d.getHours(); } function main() { //========================================================================= // 世界時計(全世界夏時間対応、DST:Daylight Saving Time)2007年版 v1.3 // Copyright (c) 2003.12 「菊池さん」<http://kikuchisan.net/> // Modified by tokd //========================================================================= // メインプログラム //========================================================================= now = new Date(); var year = now.getYear(); if (year < 2000) { year += 1900; } offset = now.getTimezoneOffset() / 60; //GMTからの時差(単位:時) var cal_d = new Date(); cal_d.setTime(Date.parse(document.getElementById("colname").value) + document.getElementById("p_hour").selectedIndex * 3600000); var now_d = new Date(year, now.getMonth(), now.getDate(), now.getHours()); offset += (cal_d - now_d) / 3600000; //夏時間の開始終了日計算 sun3_2 = calcDst(year, 3, 2, 0);// 3月第2 日曜日(米国型開始,チリ型終了) sun11_1= calcDst(year,11, 1, 0);//11月第1 日曜日(米国型終了) sun4_1 = calcDst(year, 4, 1, 0);// 4月第1 日曜日(中米型開始,ナミビア型終了) sun3_e = calcDst(year, 3, 5, 0);// 3月最終日曜日(欧州型開始,NIS型開始,オーストラリア型終了,タスマニア型終了) sun10_e= calcDst(year,10, 5, 0);//10月最終日曜日(欧州型終了,NIS型終了,オーストラリア型開始,中米型終了) y_11_2 = calcDst(year,11, 2,-1);//10月第3 日曜日(ブラジル型開始) sun2_3 = calcDst(year, 2, 3, 0);// 2月第3 日曜日(ブラジル型終了) thu4_e = calcDst(year, 4, 5, 4);// 4月最終木曜日(エジプト型開始) thu9_e = calcDst(year, 9, 5, 4);// 9月最終木曜日(エジプト型終了) y_4_1 = calcDst(year, 4, 1,-1);//日付指定(イラク型開始) y_10_1 = calcDst(year,10, 1,-1);//日付指定(イラク型終了) sun10_1= calcDst(year,10, 1, 0);//10月第1 日曜日(タスマニア型開始,ニュージーランド型開始) sun3_3 = calcDst(year, 3, 3, 0);// 3月第3 日曜日(ニュージーランド型終了) sun10_2= calcDst(year,10, 2, 0);//10月第2 日曜日(チリ型開始) y_3_27 = calcDst(year, 3,27,-1);//日付指定(モンゴル型開始) y_10_30= calcDst(year,10,24,-1);//日付指定(モンゴル型終了) y_4_15 = calcDst(year, 4,15,-1);//日付指定(パレスチナ型開始) y_10_14= calcDst(year,10,15,-1);//日付指定(パレスチナ型終了) y_3_20 = calcDst(year, 3,20,-1);//日付指定(イラン型開始) y_9_20 = calcDst(year, 9,20,-1);//日付指定(イラン型終了) y_4_6 = calcDst(year, 4, 6,-1);//日付指定(イスラエル型開始) y_9_21 = calcDst(year, 9,21,-1);//日付指定(イスラエル型終了) y_3_24 = calcDst(year, 3,24,-1);//日付指定(ヨルダン型開始) y_10_21= calcDst(year,10,15,-1);//日付指定(ヨルダン型終了) y_3_31 = calcDst(year, 3,31,-1);//日付指定(シリア型開始) y_9_30 = calcDst(year, 9,30,-1);//日付指定(シリア型終了) sun9_1 = calcDst(year, 9, 1, 0);// 9月第1 日曜日(ナミビア型開始,フォークランド型開始) sun4_3 = calcDst(year, 4, 3, 0);// 4月第3 日曜日(フォークランド型終了) y_10_17= calcDst(year,10,17,-1);//日付指定(パラグァイ型開始) y_4_4 = calcDst(year, 4, 4,-1);//日付指定(パラグァイ型終了) //時刻表示 var pctime = now.getTime(); //PC時刻(内部表現) var msg = ""; msg += "PST " + calcTime(pctime, -8, 1) + "\n"; msg += "CET " + calcTime(pctime, 1, 2) + "\n"; msg += "JST " + calcTime(pctime, 9, 0) + "\n"; msg += "\n"; msg += "Hour offset from now: " + (offset - now.getTimezoneOffset() / 60); document.getElementById("CONSOLE").innerText = msg; window.setTimeout("main()", 1000); } //========================================================================= // サブルーチン //========================================================================= // その都市の夏時間対応ローカル時刻計算 // 引数 .... PC時刻(内部表現、単位:ミリ秒) pctime // .... 時刻を求める都市のタイムゾーン(単位:時) tzone // .... 夏時間処理フラグ:無(0),米国型(1),欧州型(2),NIS型(3)等 flag // 戻り値 .... 夏時間対応ローカル時刻(日時表現) //========================================================================= function calcTime(pctime, tzone, flag) { //ローカル時刻の計算 var twntime = pctime + (tzone + offset) * 3600000; //単位ミリ秒 //夏時間の処理 var mark = ""; //DSTマーク表示用 if (((flag == 1) && ((sun3_2 + 3600000 <= twntime) && (sun11_1 > twntime))) || //米国型 ((flag == 2) && ((sun3_e <= twntime) && (sun10_e > twntime))) || //欧州型 ((flag == 3) && ((sun3_e <= twntime) && (sun10_e > twntime))) || //NIS型 ((flag == 4) && ((sun10_e <= twntime) || (sun3_e > twntime))) || //オーストラリア型 ((flag == 5) && ((y_11_2 <= twntime) || (sun2_3 > twntime))) || //ブラジル型 ((flag == 6) && ((thu4_e <= twntime) && (thu9_e > twntime))) || //エジプト型 ((flag == 7) && ((y_4_1 <= twntime) && (y_10_1 > twntime))) || //イラク型 ((flag == 8) && ((sun10_1 <= twntime) || (sun3_3 > twntime))) || //ニュージーランド型 ((flag == 9) && ((sun10_2 <= twntime) || (sun3_2 > twntime))) || //チリ型 ((flag == 10) && ((y_3_27 <= twntime) && (y_10_30 > twntime))) || //モンゴル型 ((flag == 11) && ((y_4_15 <= twntime) && (y_10_14 > twntime))) || //パレスチナ型 ((flag == 12) && ((y_3_20 <= twntime) && (y_9_20 > twntime))) || //イラン型 ((flag == 13) && ((thu3_e <= twntime) && (thu10_1 > twntime))) || //イスラエル型 ((flag == 14) && ((y_3_24 <= twntime) && (y_10_21 > twntime))) || //ヨルダン型 ((flag == 15) && ((y_3_31 <= twntime) && (y_9_30 > twntime))) || //シリア型 ((flag == 16) && ((sun9_1 <= twntime) || (sun4_1 > twntime))) || //ナミビア型 ((flag == 17) && ((sun9_1 <= twntime) || (sun4_3 > twntime))) || //フォークランド型 ((flag == 18) && ((sun10_1 <= twntime) || (sun3_e > twntime))) || //タスマニア型 ((flag == 19) && ((y_10_17 <= twntime) || (y_4_4 > twntime))) || //パラグァイ型 ((flag == 20) && ((sun4_1 <= twntime) && (sun10_e > twntime)))) //中米型 { twntime += 3600000; mark = " DST"; } //夏時間対応ローカル時刻を内部表現から日時表現に変換し戻り値にセット now.setTime(twntime); var mon = now.getMonth()+1; if (mon < 10) { mon = "0" + mon; } var date = now.getDate(); if (date < 10) { date = "0" + date; } var day = new Array( "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" ); var hour = now.getHours(); if (hour < 10) { hour = "0" + hour; } var min = now.getMinutes(); if (min < 10) { min = "0" + min; } var sec = now.getSeconds(); if (sec < 10) { sec = "0" + sec; } return now.getYear() + "/" + mon + "/" + date + " " + day[now.getDay()] + " " + hour + ":" + min + ":" + sec + mark; } //========================================================================= // 第何曜日は何日かの算出 // 引数 .... 計算対象となる年月 year month(1~12) // .... wno=0~6の時:第何曜日の指定(最終曜日は5を指定) num(1~5) // .... or wno=-1の時:何日の指定 num(1~31) // .... 曜日の指定(日=0,月=1,火=2,・・・土=6) wno(0~6) // .... or 何日の指定(=-1) wno(-1) // 戻り値 .... 時刻(内部表現) //========================================================================= function calcDst(year, month, num, wno) { //パラメータ判定 if (month < 1 || month > 12) { alert("月指定エラーです"); return; } if (wno < 0) { //日時指定の場合 if (num < 1 || num > 31) { alert("日時指定エラーです"); return; } //指定年月日の午前1時の時刻を求め内部表現に変換し戻り値にセット var dstime = new Date(year, month-1, num, 1, 0, 0); return dstime.getTime(); } else { //第何曜日指定(最終曜日は5)の場合 if (num < 1 || num > 5) { alert("第何週指定エラーです"); return; } if (wno > 6) { alert("曜日指定エラーです"); return; } //ツェラーの公式よりその年月の1日の曜日を計算 if (month <= 2) { var zyear = year - 1; var zmonth = month + 12; } else { var zyear = year; var zmonth = month; } //1月,2月は前年の13月,14月とする var wday = (zyear + Math.floor(zyear/4) - Math.floor(zyear/100) + Math.floor(zyear/400) + Math.floor((13*zmonth + 8)/5) + 1) % 7; //最終曜日指定の場合第5曜日有無の判定 if (num == 5) { if (month == 2) { if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)) { var leap = 1; } else { var leap = 0; } //閏年判定 if (leap == 0 || wno != wday) { num -= 1; } //閏年は29日のみ第5曜日 } else if (month== 4 || month== 6 || month== 9 || month== 11) { //30日月 if (wno <= 1) { if ((wno+1) <= wday && wday < (wno+6)) { num -= 1; }} else { if ((wno+1) <= wday || wday < (wno-1)) { num -= 1; }} } else { //31日月 if (wno <= 2) { if ((wno+1) <= wday && wday < (wno+5)) { num -= 1; }} else { if ((wno+1) <= wday || wday < (wno-2)) { num -= 1; }} } } //第(num)wno曜日は何日かの計算 if (wday <= wno) { var dstime = (num-1) * 7 + ((wno+1) - wday); } else { var dstime = num * 7 - (wday - (wno+1)); } //算出した年月日の午前1時の時刻を求め内部表現に変換し戻り値にセット dstime = new Date(year, month-1, dstime, 1, 0, 0); return dstime.getTime(); } } </script> <hta:application applicationName="World Time Clock" maximizeButton="no" minimizeButton="no" scroll="no" singleInstance="yes" </hta:application> </head> <body onload="cal1.write(1); adjust(0); main();"> <table><tr> <td valign="top"> <div id="calid"></div> </td> <td> <pre id="CONSOLE"></pre> <form id="formid" action=""> Scheduled date: <input type="text" name="colname" size="13" readonly> Scheduled hour: <select name="p_hour" size=1 onchange="adjust(1);"> <option> 0<option> 1<option> 2<option> 3<option> 4<option> 5<option> 6<option> 7 <option> 8<option> 9<option>10<option>11<option>12<option>13<option>14<option>15 <option>16<option>17<option>18<option>19<option>20<option>21<option>22<option>23 </select> <input type="button" value="Now" onclick="adjust(0);"> </form> </td> </tr></table> </body> </html>
(おまけ)世界時計 for TClock Tooltip
上記 HTA の前身。Microsoft Time Zone を置き換えるために作成。
エディタ等を使って下記スクリプトに拡張子 .js をつけて保存する。
スクリプトが実行された時の時差情報を同じディレクトリの
WorldTimeClock.txt というファイルに出力するので、
このスクリプトを TClock の左クリックに割り当てて
WorldTimeClock.txt をツールチップに指定すれば、簡易世界時計となる。
//========================================================================= // 世界時計(全世界夏時間対応、DST:Daylight Saving Time)2007年版 v1.3 // Copyright (c) 2003.12 「菊池さん」<http://kikuchisan.net/> // Modified by tokd for world time tclock javascript 2009/5/22 //========================================================================= // メインプログラム //========================================================================= now = new Date(); var year = now.getYear(); if (year < 2000) { year += 1900; } offset = now.getTimezoneOffset() / 60; //GMTからの時差(単位:時) //夏時間の開始終了日計算 sun3_2 = calcDst(year, 3, 2, 0);// 3月第2 日曜日(米国型開始,チリ型終了) sun11_1= calcDst(year,11, 1, 0);//11月第1 日曜日(米国型終了) sun4_1 = calcDst(year, 4, 1, 0);// 4月第1 日曜日(中米型開始,ナミビア型終了) sun3_e = calcDst(year, 3, 5, 0);// 3月最終日曜日(欧州型開始,NIS型開始,オーストラリア型終了,タスマニア型終了) sun10_e= calcDst(year,10, 5, 0);//10月最終日曜日(欧州型終了,NIS型終了,オーストラリア型開始,中米型終了) y_11_2 = calcDst(year,11, 2,-1);//10月第3 日曜日(ブラジル型開始) sun2_3 = calcDst(year, 2, 3, 0);// 2月第3 日曜日(ブラジル型終了) thu4_e = calcDst(year, 4, 5, 4);// 4月最終木曜日(エジプト型開始) thu9_e = calcDst(year, 9, 5, 4);// 9月最終木曜日(エジプト型終了) y_4_1 = calcDst(year, 4, 1,-1);//日付指定(イラク型開始) y_10_1 = calcDst(year,10, 1,-1);//日付指定(イラク型終了) sun10_1= calcDst(year,10, 1, 0);//10月第1 日曜日(タスマニア型開始,ニュージーランド型開始) sun3_3 = calcDst(year, 3, 3, 0);// 3月第3 日曜日(ニュージーランド型終了) sun10_2= calcDst(year,10, 2, 0);//10月第2 日曜日(チリ型開始) y_3_27 = calcDst(year, 3,27,-1);//日付指定(モンゴル型開始) y_10_30= calcDst(year,10,24,-1);//日付指定(モンゴル型終了) y_4_15 = calcDst(year, 4,15,-1);//日付指定(パレスチナ型開始) y_10_14= calcDst(year,10,15,-1);//日付指定(パレスチナ型終了) y_3_20 = calcDst(year, 3,20,-1);//日付指定(イラン型開始) y_9_20 = calcDst(year, 9,20,-1);//日付指定(イラン型終了) y_4_6 = calcDst(year, 4, 6,-1);//日付指定(イスラエル型開始) y_9_21 = calcDst(year, 9,21,-1);//日付指定(イスラエル型終了) y_3_24 = calcDst(year, 3,24,-1);//日付指定(ヨルダン型開始) y_10_21= calcDst(year,10,15,-1);//日付指定(ヨルダン型終了) y_3_31 = calcDst(year, 3,31,-1);//日付指定(シリア型開始) y_9_30 = calcDst(year, 9,30,-1);//日付指定(シリア型終了) sun9_1 = calcDst(year, 9, 1, 0);// 9月第1 日曜日(ナミビア型開始,フォークランド型開始) sun4_3 = calcDst(year, 4, 3, 0);// 4月第3 日曜日(フォークランド型終了) y_10_17= calcDst(year,10,17,-1);//日付指定(パラグァイ型開始) y_4_4 = calcDst(year, 4, 4,-1);//日付指定(パラグァイ型終了) //時刻表示 var pctime = now.getTime(); //PC時刻(内部表現) var msg = ""; //msg += "ウェリントン " + calcTime(pctime, 12, 8) + "\n"; //msg += "シドニー " + calcTime(pctime, 10, 4) + "\n"; //msg += "東京 " + calcTime(pctime, 9, 0) + "\n"; //msg += "ウランバートル " + calcTime(pctime, 8, 0) + "\n"; //msg += "北京・香港 " + calcTime(pctime, 8, 0) + "\n"; //msg += "バクダット " + calcTime(pctime, 3, 7) + "\n"; //msg += "モスクワ " + calcTime(pctime, 3, 2) + "\n"; //msg += "カイロ " + calcTime(pctime, 2, 6) + "\n"; //msg += "ロンドン " + calcTime(pctime, 0, 2) + "\n"; //msg += "リオデジャネイロ " + calcTime(pctime, -3, 5) + "\n"; //msg += "サンティアゴ " + calcTime(pctime, -4, 9) + "\n"; //msg += "ニューヨーク " + calcTime(pctime, -5, 1) + "\n"; //msg += "ロサンジェルス " + calcTime(pctime, -8, 1) + "\n"; //msg += "ホノルル " + calcTime(pctime,-10, 0) + "\n"; //msg += "テヘラン " + calcTime(pctime,3.5,12) + "\n"; msg += "PST " + calcTime(pctime, -8, 1) + "\n"; msg += "CET " + calcTime(pctime, 1, 2) + "\n"; msg += "JST " + calcTime(pctime, 9, 0); // WSH jscript for Tclock tooltip var fso = new ActiveXObject("Scripting.FileSystemObject"); var outFile = fso.CreateTextFile("WorldTimeClock.txt", true); outFile.Write(msg); outFile.Close(); //========================================================================= // サブルーチン //========================================================================= // その都市の夏時間対応ローカル時刻計算 // 引数 .... PC時刻(内部表現、単位:ミリ秒) pctime // .... 時刻を求める都市のタイムゾーン(単位:時) tzone // .... 夏時間処理フラグ:無(0),米国型(1),欧州型(2),NIS型(3)等 flag // 戻り値 .... 夏時間対応ローカル時刻(日時表現) //========================================================================= function calcTime(pctime, tzone, flag) { //ローカル時刻の計算 var twntime = pctime + (tzone + offset) * 3600000; //単位ミリ秒 //夏時間の処理 var mark = ""; //DSTマーク表示用 if (((flag == 1) && ((sun3_2 + 3600000 <= twntime) && (sun11_1 > twntime))) || //米国型 ((flag == 2) && ((sun3_e <= twntime) && (sun10_e > twntime))) || //欧州型 ((flag == 3) && ((sun3_e <= twntime) && (sun10_e > twntime))) || //NIS型 ((flag == 4) && ((sun10_e <= twntime) || (sun3_e > twntime))) || //オーストラリア型 ((flag == 5) && ((y_11_2 <= twntime) || (sun2_3 > twntime))) || //ブラジル型 ((flag == 6) && ((thu4_e <= twntime) && (thu9_e > twntime))) || //エジプト型 ((flag == 7) && ((y_4_1 <= twntime) && (y_10_1 > twntime))) || //イラク型 ((flag == 8) && ((sun10_1 <= twntime) || (sun3_3 > twntime))) || //ニュージーランド型 ((flag == 9) && ((sun10_2 <= twntime) || (sun3_2 > twntime))) || //チリ型 ((flag == 10) && ((y_3_27 <= twntime) && (y_10_30 > twntime))) || //モンゴル型 ((flag == 11) && ((y_4_15 <= twntime) && (y_10_14 > twntime))) || //パレスチナ型 ((flag == 12) && ((y_3_20 <= twntime) && (y_9_20 > twntime))) || //イラン型 ((flag == 13) && ((thu3_e <= twntime) && (thu10_1 > twntime))) || //イスラエル型 ((flag == 14) && ((y_3_24 <= twntime) && (y_10_21 > twntime))) || //ヨルダン型 ((flag == 15) && ((y_3_31 <= twntime) && (y_9_30 > twntime))) || //シリア型 ((flag == 16) && ((sun9_1 <= twntime) || (sun4_1 > twntime))) || //ナミビア型 ((flag == 17) && ((sun9_1 <= twntime) || (sun4_3 > twntime))) || //フォークランド型 ((flag == 18) && ((sun10_1 <= twntime) || (sun3_e > twntime))) || //タスマニア型 ((flag == 19) && ((y_10_17 <= twntime) || (y_4_4 > twntime))) || //パラグァイ型 ((flag == 20) && ((sun4_1 <= twntime) && (sun10_e > twntime)))) //中米型 { twntime += 3600000; mark = " DST"; } //夏時間対応ローカル時刻を内部表現から日時表現に変換し戻り値にセット now.setTime(twntime); var mon = now.getMonth()+1; if (mon < 10) { mon = "0" + mon; } var date = now.getDate(); if (date < 10) { date = "0" + date; } var day = new Array( "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" ); var hour = now.getHours(); if (hour < 10) { hour = "0" + hour; } var min = now.getMinutes(); if (min < 10) { min = "0" + min; } var sec = now.getSeconds(); if (sec < 10) { sec = "0" + sec; } return now.getYear() + "/" + mon + "/" + date + " " + day[now.getDay()] + " " + hour + ":" + min + ":" + mark; } //========================================================================= // 第何曜日は何日かの算出 // 引数 .... 計算対象となる年月 year month(1~12) // .... wno=0~6の時:第何曜日の指定(最終曜日は5を指定) num(1~5) // .... or wno=-1の時:何日の指定 num(1~31) // .... 曜日の指定(日=0,月=1,火=2,・・・土=6) wno(0~6) // .... or 何日の指定(=-1) wno(-1) // 戻り値 .... 時刻(内部表現) //========================================================================= function calcDst(year, month, num, wno) { //パラメータ判定 if (month < 1 || month > 12) { alert("月指定エラーです"); return; } if (wno < 0) { //日時指定の場合 if (num < 1 || num > 31) { alert("日時指定エラーです"); return; } //指定年月日の午前1時の時刻を求め内部表現に変換し戻り値にセット var dstime = new Date(year, month-1, num, 1, 0, 0); return dstime.getTime(); } else { //第何曜日指定(最終曜日は5)の場合 if (num < 1 || num > 5) { alert("第何週指定エラーです"); return; } if (wno > 6) { alert("曜日指定エラーです"); return; } //ツェラーの公式よりその年月の1日の曜日を計算 if (month <= 2) { var zyear = year - 1; var zmonth = month + 12; } else { var zyear = year; var zmonth = month; } //1月,2月は前年の13月,14月とする var wday = (zyear + Math.floor(zyear/4) - Math.floor(zyear/100) + Math.floor(zyear/400) + Math.floor((13*zmonth + 8)/5) + 1) % 7; //最終曜日指定の場合第5曜日有無の判定 if (num == 5) { if (month == 2) { if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)) { var leap = 1; } else { var leap = 0; } //閏年判定 if (leap == 0 || wno != wday) { num -= 1; } //閏年は29日のみ第5曜日 } else if (month== 4 || month== 6 || month== 9 || month== 11) { //30日月 if (wno <= 1) { if ((wno+1) <= wday && wday < (wno+6)) { num -= 1; }} else { if ((wno+1) <= wday || wday < (wno-1)) { num -= 1; }} } else { //31日月 if (wno <= 2) { if ((wno+1) <= wday && wday < (wno+5)) { num -= 1; }} else { if ((wno+1) <= wday || wday < (wno-2)) { num -= 1; }} } } //第(num)wno曜日は何日かの計算 if (wday <= wno) { var dstime = (num-1) * 7 + ((wno+1) - wday); } else { var dstime = num * 7 - (wday - (wno+1)); } //算出した年月日の午前1時の時刻を求め内部表現に変換し戻り値にセット dstime = new Date(year, month-1, dstime, 1, 0, 0); return dstime.getTime(); } }