• 締切済み

JavaScript でのリアルタイム時刻表示

17時間の時差があるアメリカの時刻をリアルタイムに表示したいのですが数箇所おかしな点があり、困っています。 17時間遅れているアメリカの時間を表示しようとしたのですが、17時間遅れているということから -17 しています。 hour の取得時に -17 としてみたのですが、おかしな表示になってしまい、正常に表示されません。 日本時間: 2008/02/13 02:14:55 アメリカ時間: 2008/02/13 0-15:14:55 というように表示されてしまいます。 本来なら17時間遅れているアメリカの時間は、 2008/02/12 09:14:55 と表示されなければいけないのですが、 どうすれば改善されますか? また日付の取得が10ずれてるのですが、 これも改善したいです。 単純に+10してしまうと、22日以降の表示がおかしくなると思うのでなんらかの対処が必要と思いますが、対処方法が分かりません。 以下にスクリプトを記しますので、ご教授よろしくお願い致します。 <script language="JavaScript"> <!-- function ClockU(){ time = new Date(); YearU = time.getFullYear(); MonthU = time.getMonth()+1; DayU = time.getDay(); HourU = time.getHours()-17; MinuteU = time.getMinutes(); SecondU = time.getSeconds(); if(MonthU<10){MonthU='0'+MonthU;} if(DayU<10){DayU='0'+DayU;} if(HourU<10){HourU='0'+HourU;} if(MinuteU<10){MinuteU='0'+MinuteU;} if(SecondU<10){SecondU='0'+SecondU;} document.getElementById('ClockU').innerHTML = YearU+'/'+MonthU+'/'+DayU+' '+HourU+':'+MinuteU+':'+SecondU; setTimeout('ClockU()',100); } setTimeout('ClockU()'); // --> </script>

みんなの回答

  • venzou
  • ベストアンサー率71% (311/435)
回答No.4

>GMTでの時間表示をする場合はどうなるのでしょうか? >GMTですとサマータイムとウィンタータイムで1時間の時差が生じたと思います。 GMTはグリニッジ標準時のことで、サマータイム等とは別の話だと思います。 各地域の標準時は、GMTとの時差を使って表現できます。 最近はUTC(協定世界時)を使うようですが、これはGMTとほぼ同じです。 例:  日本標準時(JST):GMT+9   GMTに9時間足すと、日本標準時  太平洋標準時(PST):GMT-8   GMTから8時間引くと、太平洋標準時  太平洋夏時間(PDT):GMT-7   GMTから7時間引くと、太平洋標準時の夏時間 サマータイムは、地域によって期間が異なるので、地域を特定しないと計算出来ません。 夏時間(サマータイム) http://ja.wikipedia.org/wiki/%E5%A4%8F%E6%99%82%E9%96%93 >17時間遅れているアメリカの時間 と言うことなので、太平洋標準時だと仮定して話を進めます。 太平洋標準時 http://ja.wikipedia.org/wiki/%E5%A4%AA%E5%B9%B3%E6%B4%8B%E6%A8%99%E6%BA%96%E6%99%82 夏時間の期間は、昨年変更されたばかりで、3月の第2日曜日午前2時から11月の第1日曜日午前2時までの期間だそうです。 日付をチェックし、この期間内に入っている場合は、GMT-7になります。つまり日本との差は16時間ですね。 ----サンプル---- <script language="JavaScript"> <!-- //太平洋時間(PT)を取得する function getDatePT() { var pst = new Date(); var pdt = new Date(); var offset = pst.getTimezoneOffset()/60;//現地の時差 pst.setTime(pst.getTime() + (offset-8)*60*60*1000); //PSTの計算 pdt.setTime(pdt.getTime() + (offset-7)*60*60*1000); //PDTの計算 //夏時間の期間のチェック if(getPdtStartDate() <= pst && pdt <getPdtEndDate()){ return pdt; }else{ return pst; } } //PDTの開始日時を取得する //3月の第2日曜日の午前2時(PST) function getPdtStartDate() { var now = new Date(); var ret = new Date(now.getFullYear(), 3-1, 1, 2, 0, 0); for(var c = 0; ; ret.setTime(ret.getTime() + 24*60*60*1000)){ if(ret.getDay() == 0) c++; if(c >= 2) break; } return ret; } //PDTの終了日時を取得する //11月の第1日曜日の午前2時(PDT) function getPdtEndDate() { var now = new Date(); var ret = new Date(now.getFullYear(), 11-1, 1, 2, 0, 0); for(var c = 0; ; ret.setTime(ret.getTime() + 24*60*60*1000)){ if(ret.getDay() == 0) c++; if(c >= 1) break; } return ret; } function ClockU(){ time = getDatePT(); YearU = time.getFullYear(); MonthU = time.getMonth()+1; DayU = time.getDate(); HourU = time.getHours(); MinuteU = time.getMinutes(); SecondU = time.getSeconds(); if(MonthU<10){MonthU='0'+MonthU;} if(DayU<10){DayU='0'+DayU;} if(HourU<10){HourU='0'+HourU;} if(MinuteU<10){MinuteU='0'+MinuteU;} if(SecondU<10){SecondU='0'+SecondU;} document.getElementById('ClockU').innerHTML = YearU+'/'+MonthU+'/'+DayU+' '+HourU+':'+MinuteU+':'+SecondU; setTimeout('ClockU()',100); } setTimeout('ClockU()'); // --> </script>

  • venzou
  • ベストアンサー率71% (311/435)
回答No.3

おかしいですね。 No1、2の方法で、前日の日付になるはずですよ。 うちの環境では、正常です。(WindowsXP IE6, Firefox2) 現在:2008/02/14 01:44:09 表示:2008/02/13 08:44:09 念のため全ソース載せますので、これで確認してみて下さい。 <html> <head> <title>時計</title> <script language="JavaScript"> <!-- function ClockU(){ time = new Date(); time.setTime(time.getTime()-17*60*60*1000); YearU = time.getFullYear(); MonthU = time.getMonth()+1; DayU = time.getDate(); HourU = time.getHours(); MinuteU = time.getMinutes(); SecondU = time.getSeconds(); if(MonthU<10){MonthU='0'+MonthU;} if(DayU<10){DayU='0'+DayU;} if(HourU<10){HourU='0'+HourU;} if(MinuteU<10){MinuteU='0'+MinuteU;} if(SecondU<10){SecondU='0'+SecondU;} document.getElementById('ClockU').innerHTML = YearU+'/'+MonthU+'/'+DayU+' '+HourU+':'+MinuteU+':'+SecondU; setTimeout('ClockU()',100); } setTimeout('ClockU()'); // --> </script> </head> <body> <span id="ClockU"></span> </body> </html>

Boos_
質問者

お礼

venzon さん、たびたびありがとうございます。 ソースに間違いがあったようですが、どこに間違いがあるか不明だったので、公開して頂いたソースをコピーさせて頂きました。 無事表示できるようになりました。 GMTでの時間表示をする場合はどうなるのでしょうか? GMTですとサマータイムとウィンタータイムで1時間の時差が生じたと思います。 ご存知であればご教授よろしくお願い致します。

  • venzou
  • ベストアンサー率71% (311/435)
回答No.2

時間の件は回答出てますので、日付の件について・・・ >また日付の取得が10ずれてるのですが、 日付は、getDay()ではなく、getDate()ですよ。 getDay()は、曜日を調べるものです。 17時間遅らす件と、合わせると下記の様になると思います。 ----変更箇所のみ抜粋---- time = new Date(); time.setTime(time.getTime()-17*60*60*1000); YearU = time.getFullYear(); MonthU = time.getMonth()+1; DayU = time.getDate(); HourU = time.getHours();

Boos_
質問者

お礼

アドバイスありがとうございます。 早速試してみたところ、 日本時間で17時以降24時までは 17時間の時差を設定した時計も正常に動作しますが、 日本時間が0時になると、 0-17時になってしまいます。 これを前日の7時と表示させたいのですが 何か方法はありますか? ex. 日本時間: 2008年2月14日0時5分 17時間の時差時計: 2008年2月14日0-17時5分 というように表示されます。 本来なら2008年2月13日7時と表示されなければいけないのですが、 そのようになりません。 何かご存知でしたら 引き続きご教授よろしくお願い致します。

  • shimix
  • ベストアンサー率54% (865/1590)
回答No.1

#17時間差(utc-8)ということはpstですね。 数値にしてから加減算すればいいのでは?   pst = new Date();   pst.setTime(pst.getTime() - (17 * 3600 * 1000)); >また日付の取得が10ずれてるのですが、 ちょっと読み取れませんでした(汗)。本当にずれているのであれば、同様に数値にしてから10日分のミリ秒を加算すればいいのですが・・。 #PCの日付がずれていたりはしませんよね?

関連するQ&A

専門家に質問してみよう