|
|
11/26(Tue) 08:05
世界時計(全世界夏時間対応、DST:Daylight Saving Time)
■(06.11.10)2007年の米国型の期間変更に対応。米国型、中米型に分離設定(2007年版 v1.3)。jsファイルを変更してください。
■(04.10.14)2004年の期間情報(南半球開始)のデータ更新実施(2004年版 v1.2)。jsファイルを変更してください。
■(04.03.27)大洋州(オーストラリア、タスマニア、ニュージーランド)、ロシアの期間情報に1日のずれが見つかったのでデータ更新実施(2004年版 v1.1)。jsファイルを変更してください。
■(03.12.10)2004年の期間情報(北半球開始終了,南半球終了)が公表されたのでデータ更新実施(2004年版)。jsファイルを変更してください。
■(03.12.07)タイプ追加とフォーム記述固定の制限解除およびデータチェック処理の充実を行った全世界夏時間対応の最新版にアップデートしました。jsファイル、htmlファイルとも最新版に変更してください。
サマータイム実施77カ国対応の全世界夏時間対応世界時計です(夏時間には*が表示されます)。サマータイムは国により開始・終了日と時刻が異なり、国や州ごとに毎年決め直すところもあります。
などで、都市のタイムゾーンはWindowsコントロールパネルの「日付と時刻」で確認できます。
- 開始・終了日を次のタイプに分けて処理(タイプ一覧表)
フラグ | タイプ | 開始日 | 終了日 | 地域 | 対象国 |
1 | 米国型 | 3月第2日曜日 | 11月第1日曜日 | 北米 | 米,カナダ,英領バーミューダ |
20 | 中米型 | 4月第1日曜日 | 10月最終日曜日 | 中米 | メキシコ,カリブ諸島(バハマ,ハイチ) |
2 | 欧州型 | 3月最終日曜日 | 10月最終日曜日 | 欧州 | 英,露,アイルランド,西欧,北欧,東欧,トルコ(中東) |
3 | NIS型 | 3月最終日曜日 | 10月最終日曜日 | NIS諸国 | アルメニア,グルジア,キリギス他,レバノン(中東) |
4 | オーストラリア型 | 10月最終日曜日 | 3月最終日曜日 | 大洋州 | オーストラリア(N.S.ウェールズ,ビクトリア,南Aus州) |
18 | タスマニア型 | 10月第1日曜日 | 3月最終日曜日 | 大洋州 | オーストラリア(タスマニア) |
8 | ニュージーランド型 | 10月第1日曜日 | 3月第3日曜日 | 大洋州 | ニュージーランド |
6 | エジプト型 | 4月最終木曜日 | 9月最終木曜日 | アフリカ | エジプト |
16 | ナミビア型 | 9月第1日曜日 | 4月第1日曜日 | アフリカ | ナミビア |
5 | ブラジル型 | 10月第3日曜日 | 2月第3日曜日 | 南米 | ブラジル東部 |
9 | チリ型 | 10月第2日曜日 | 3月第2日曜日 | 南米 | チリ,イースタ島 |
17 | フォークランド型 | 9月第1日曜日 | 4月第3日曜日 | 南米 | 英領フォークランド諸島 |
7 | イラク型 | 4月1日 | 10月1日 | 中東 | イラク |
13 | イスラエル型* | 4月6日 | 9月21日 | 中東 | イスラエル |
11 | パレスチナ型* | 4月15日 | 10月15日 | 中東 | パレスチナ(ガザ地区) |
12 | イラン型* | 3月20日 | 9月20日 | 中東 | イラン |
14 | ヨルダン型* | 3月24日 | 10月15日 | 中東 | ヨルダン |
15 | シリア型* | 3月31日 | 9月30日 | 中東 | シリア |
10 | モンゴル型* | 3月27日 | 10月24日 | アジア | モンゴル |
19 | パラグァイ型* | 10月17日 | 4月4日 | 南米 | パラグァイ |
(注)*:日付指定国のうち毎年日付確認が必要なタイプ。(日付は2004年版)
・米国型、欧州型、NIS型は複数国が採用してますが、それ以外はその国単独の採用です。
- 時刻切替タイミングは各タイプとも共通です。開始・終了とも英国(ロンドン)の切替タイミングであるローカル標準時刻午前1時を基準に切り替えます(国によっては切替時刻が異なるので切替のタイミングが1〜数時間前後することがあります)。
(1)開始日の午前1時(=ローカル標準時刻午前1時)に1時間進め午前2時に、
(2)終了日の午前2時(=ローカル標準時刻午前1時)に1時間戻し午前1時にしています。
※米国の開始時刻は「午前2時に1時間進め午前3時」(終了時刻は英国と同じ)ですので正確に切替えたい方は「応用編」「時刻切替タイミングを変更するには?」の「開始時刻の変更」を参考に変更してください(2007年版には組込み済)。
スポンサーリンク
■ プログラムをダウンロードします。
プログラムの名前を[左]クリックするとダウンロードを始めます。jsファイルのため警告メッセージが表示されますが「保存」を選択しworldclock.jsの名前で保存したい場所に保存します。
■ スクリプトの編集(都市の追加・変更)
主要な都市データがデフォルト設定されてますのでこのままでも利用できます。都市の追加・変更は、ダウンロードした worldclock.js を編集します。(応用編参照)
■ 表示用HTML文の作成
世界時間を表示したい場所に表示用HTML文を記述します。表示用HTML文はworldclock.jsと同じ場所に保存します。表示方法は一覧形式かプルダウンメニュー形式を選択でき、スクリプトが自動識別して表示します。
(1)表示用フォーム名を「 list 」にすれば一覧形式で表示
(2)フォーム名を「 pull 」にすればプルダウンメニュー形式で表示
■一覧形式(小ウィンドウ表示)
(1)下記HTML文をコピー貼付けして、worldclock.htmlの名前でworldclock.jsと同じ場所に保存します。
(フォームとスタイルシート部分を切り出してHTML本文に貼り付ければこのページトップのようにページ内表示としても使用できます)
worldclock.html
(2)小ウィンドウ表示用HTML
小ウィンドウ表示用リンクを表示したい場所に記述します。
■プルダウンメニュー形式
(1)下記HTML文をコピー貼付けして、世界時計を表示したい場所に記述します。
■ 応用編
- 都市を追加・変更するには?
- タイプを追加・変更するには?
- 開始終了日が日付指定の場合はどうすればいいの?
- 時刻切替タイミングを変更するには?
- 時刻表示形式を変更するには?
- 開始終了日の計算結果を確認するには?
■ 都市を追加・変更するには?
- データ定義(個人設定)で世界時計を表示したい都市名、都市のタイムゾーンと夏時間処理フラグを定義します。
- ・表示したい国や州がサマータイム採用かどうかや採用してる場合の期間はWorldTimeZone.orgで、
- ・夏時間処理フラグの値は「タイプ一覧表」のフラグの項で、
- ・都市のタイムゾーンはWindowsコントロールパネルの「日付と時刻」で
確認できます。
(注)アメリカのハワイ州・アリゾナ州・インディアナ州の一部、カナダのサスカチュワン州、オーストラリアのクイーンズランド州のように州によっては採用しないところもありますので都市を追加する場合は注意してください。
- 都市の追加方法
(1)配列 city, zone, flag に都市名、都市のタイムゾーンと夏時間処理フラグを「対」で追加します
(2)表示用HTML文にinput文またはoption文を追加します
- ・一覧形式表示の場合はinput文(形式:都市名<input type=text name="都市名">)
- ・プルダウンメニュー形式表示の場合はoption文(形式:<option>都市名)
(注1)配列 city で定義した都市名と、input文の name="都市名"またはoption文の都市名(青色部)は同じにしてください。
(注2)input文、option文は、配列 city の定義順と関係なく任意の位置に挿入できます。例えば、配列 city の最後に追加した都市をリストの先頭に表示するなどが可能です。
■ タイプを追加・変更するには?
タイプの追加・変更を簡単に行うことができます。(配布版には組み込み済み)
- 南米ブラジル(サマータイム:10月第3日曜日〜2月第3日曜日、タイムゾーン:-3,、夏時間処理フラグ:5)
を追加する方法を紹介します。タイプ追加に必要な変更・追加箇所は次の3ヶ所です。
- メインプログラム部−−夏時間の開始終了日計算の追加
- 関数calcTime−−−夏時間の処理の追加
- 都市の追加−−−−(方法はこのページの「都市を追加・変更するには?」にあります)
■メインプログラム部−−夏時間の開始終了日計算の追加
すでに計算値がある場合はその値が使えますが、10月第3日曜日と2月第3日曜日はないので次の2つの計算式を新しく追加します。
- 関数calcDstのパラメータの意味は、year年、10月、第3、日曜(=0)と、year年、2月、第3、日曜(=0)です
- 変数名sun10_3は10月第3日曜日、sun2_3は2月第3日曜日を表します
sun10_3= calcDst(year,10,3,0); //10月第3日曜日(ブラジル型開始)
sun2_3 = calcDst(year,2,3,0); // 2月第3日曜日(ブラジル型終了)
|
■関数calcTime−−−夏時間の処理の追加
オーストラリア型の判定文(if文)の次行にブラジル型の判定文2行を追加します。
- if文中の条件は左が開始条件、右が終了条件です
- AND/OR条件は、北半球の場合はAND条件(&&)、南半球の場合はOR条件(||)になります
夏時間処理フラグはブラジル型を「5」と定めたので最初にタイプ判定を行います。さらに、ブラジルは南半球にあるので、開始条件(sun10_3<=twntime)と終了条件(sun2_3>twntime)をOR条件(||)で結びます。
} else if (flag == 4) { //オーストラリア型
if ((sun10_e<=twntime) || (sun3_e>twntime)) { twntime+= 3600000; mark="*";}
} else if (flag == 5) { //ブラジル型
if ((sun10_3<=twntime) || (sun2_3>twntime)) { twntime+= 3600000; mark="*";}
|
以上でブラジル型タイプの追加は完了です。
■同様に
- エジプト(サマータイム:4月第最終木曜日〜9月最終木曜日、タイムゾーン:2,、夏時間処理フラグ:6)
は次のようになります。(エジプトは北半球なのでAND条件、夏時間処理フラグはエジプト型は「6」)
thu4_e = calcDst(year,4,5,4); // 4月最終木曜日(エジプト型開始)
thu9_e = calcDst(year,9,5,4); // 9月最終木曜日(エジプト型終了)
|
} else if (flag == 5) { //ブラジル型
if ((sun10_3<=twntime) || (sun2_3>twntime)) { twntime+= 3600000; mark="*";}
} else if (flag == 6) { //エジプト型
if ((thu4_e<=twntime) && (thu9_e>twntime)) { twntime+= 3600000; mark="*";}
|
このように同じ方法でタイプの追加がいくつでも行えます。
■ 開始終了日が日付指定の場合はどうすればいいの?
国によってはサマータイム開始終了日が第何曜日指定でなく、日付指定の国があります。この場合は
- 関数calcDstのパラメータに日付(年、月、日)を指定します。
- ・関数calcDstのパラメータwnoは、wno=0〜6の時は曜日指定ですが、日付指定にする場合は -1 にします。
- ・パラメータwnoが -1 の場合は num は日付とみなします。
例として、中東イラクで説明します。
- イラク(サマータイム:4月1日〜10月1日、タイムゾーン:3,、夏時間処理フラグ:7)
- 関数calcDstのパラメータの意味は、year年、4月、1日、日付指定(=-1)と、year年、10月、1日、日付指定(=-1)です
- 変数名y_4_1は日付指定4月1日、y_10_1は日付指定10月1日を表します
- 夏時間処理フラグはイラク型を「7」と定めたので最初にタイプ判定を行い、イラクは北半球なので開始終了条件をAND条件で結びます。
y_4_1 = calcDst(year,4,1,-1); //日付指定(イラク型開始)
y_10_1 = calcDst(year,10,1,-1); //日付指定(イラク型終了)
|
} else if (flag == 5) { //ブラジル型
if ((sun10_3<=twntime) || (sun2_3>twntime)) { twntime+= 3600000; mark="*";}
} else if (flag == 6) { //エジプト型
if ((thu4_e<=twntime) && (thu9_e>twntime)) { twntime+= 3600000; mark="*";}
} else if (flag == 7) { //イラク型
if ((y_4_1<=twntime) && (y_10_1>twntime)) { twntime+= 3600000; mark="*";}
|
■ 時刻切替タイミングを変更するには?
このスクリプトでは午前1時を基準に時刻切替を行っています。切替タイミング時刻を変更するには、関数calcTime「夏時間の処理」の開始条件と終了条件の内容を変更します。
■ 開始時刻の変更
例えば、アメリカの夏時間開始を
現状: 「午前1時に1時間進め午前2時にする」から
変更後:「午前2時に1時間進め午前3時にする」に変更する
ためには開始時間を1時間遅らせる必要があります。開始時刻の変更ですので、開始条件を以下のように変更をします。
開始時間を sun3_2 から1時間遅らせるため、「sun3_2」を「sun3_2+3600000」に変更します。
3600000は60分x60秒x1000ミリ秒=1時間です。
変更前:
if (flag == 1) { //米国型
if ((sun3_2<=twntime) && (sun11_1>twntime)) { twntime+= 3600000; mark="*";}
変更後:
if (flag == 1) { //米国型
if ((sun3_2+3600000<=twntime) && (sun11_1>twntime)) { twntime+= 3600000; mark="*";}
|
■ 終了時刻の変更
例えば、アメリカの夏時間終了を
現状: 「午前2時に1時間戻し午前1時にする」から
変更後:「午前1時に1時間戻し午前0時にする」に変更する
ためには終了時間を1時間早める必要があります。終了時刻の変更ですので、終了条件を以下のように変更をします。
終了時間を sun11_1 から1時間早めるため、「sun11_1」を「sun11_1-3600000」に変更します。
3600000は60分x60秒x1000ミリ秒=1時間です。
変更前:
if (flag == 1) { //米国型
if ((sun3_2<=twntime) && (sun11_1>twntime)) { twntime+= 3600000; mark="*";}
変更後:
if (flag == 1) { //米国型
if ((sun3_2<=twntime) && (sun11_1-3600000>twntime)) { twntime+= 3600000; mark="*";}
|
■ 時刻表示形式を変更するには?
デフォルトの時刻表示形式は、日 時:分:秒 となってますが、秒を表示したくない場合は、関数calcTimeの最終行にあるreturn文の内容を変更します。時刻表示用フォームサイズを短くしたい場合は、スタイルシートのinput中の width の値で調整できます。
変更前:
return date + "日 " + hour + ":" + min + ":" + sec + mark;
変更後:
return date + "日 " + hour + ":" + min + mark;
|
■ 開始終了日の計算結果を確認するには?(デバッグ文)
サマータイム開始終了日の計算結果を確認する時には以下のデバッグ文(document.write文)を1行関数calcDst中に挿入します。挿入箇所は2箇所です。(下記参照)
if (wno < 0) { //日時指定の場合
if (num < 1 || num > 31) { alert("日時指定エラーです"); return; }
//指定年月日の午前2時の時刻を求め内部表現に変換し戻り値にセット
document.write("第- -曜= "+year+" "+month+" "+num+" ");
//第(num)wno曜日は何日かの計算
if (wday <= wno) { dstime = (num-1)*7 + ((wno+1) - wday); }
else { dstime = num*7 - (wday - (wno+1)); }
document.write("第"+num+" "+wno+"曜= "+year+" "+month+" "+dstime+" ");
|
デバッグ文を挿入すると以下の「計算結果」欄の内容が表示されますので実際の暦と照らして希望のものかどうか確認します。日付指定の場合は「第- -曜」と表示されます。
計算結果 | 計算結果の内容 | 備考 |
第1 0曜= 2004 4 4 | 2004年4月の第1日曜(0)は 4日 | 米国型開始 |
第4 0曜= 2004 3 28 | 2004年3月の最終(第4)日曜(0)は 28日 | 欧州型開始,オーストラリア型終了 |
第5 0曜= 2004 10 31 | 2004年10月の最終(第5)日曜(0)は 31日 | 米国型終了,欧州型終了,オーストラリア型開始 |
第4 6曜= 2004 3 27 | 2004年3月の最終(第4)土曜(6)は 27日 | NIS型開始 |
第5 6曜= 2004 10 30 | 2004年10月の最終(第5)土曜(6)は 30日 | NIS型終了 |
第- -曜= 2004 4 1 | 2004年4月1日の日付指定 | イラク型開始 |
第- -曜= 2004 10 1 | 2004年10月1日の日付指定 | イラク型終了 |
|
|