• ベストアンサー

残り時間カウントダウン表示 『あと○時間△分□秒』

CGIゲーム内であるイベントが発生してから12時間後に新イベントが自動発生するスクリプトを作りたいのですが ネット検索をしても残り日数表示しかなくてサンプルがないので創ってみたのですが <body onLoad="count()" onUnload="clearTimeout()"> $ENV{'TZ'} = "JST-9"; my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time); <=現在の時間 $date="0,0,11,3,0,107,0,27,0 485,197,854,"; <=保存されたプレイベント発生時間 foreach($date){ ($sc,$mi,$ho,$md,$mo,$ye,$wd,$yd,$isd)=split(/,/); } print <<"EOM"; <SCRIPT language="JavaScript"> <!-- cnt = $sc-$sec; cnt1=$mi-$min; if($ho>$hour){cnt2=$ho-$hour-12;} else{cnt2=$ho-$hour+12;} if(cnt2>12){cnt2=cnt2-12;} if(cnt<0){cnt=cnt+59; cnt1=cnt1-1;} if(cnt1<0){cnt1=cnt1+59; cnt2=cnt2-1;} if(cnt2<0){cnt=0;cnt1=0;cnt2=0;} function count(){ document.form.box.value = cnt2+"時間"+cnt1+"分"+cnt+"秒"; cnt--; if(cnt<0){cnt=cnt+60; cnt1=cnt1-1;} if(cnt1<0){cnt1=cnt1+60; cnt2=cnt2-1;} if(cnt2<0){cnt=0;cnt1=0;cnt2=0;} if(cnt2 >=0) { if(cnt1 >=0) { if(cnt >=0) { setTimeout("count()",1000); }}} } //--> </SCRIPT> <FORM name="form"> あと<INPUT type="text" name="box" size="17">です </FORM> EOM とりあえず表示はできた(と思う)のですがもっと楽で確実な方法はありますでしょうか?(モジュールとかは使わずに) または上記のスクリプトすぐに思いつかなかったのでtime()で計算してたのですが 『残り53495秒』(適当)のような表記方法しか分かりません これを○時間△分□秒のように変換してカウントダウンできるでしょうか? localtime()、time()どちらでもいいのでご意見お願いします

質問者が選んだベストアンサー

  • ベストアンサー
  • hkd9001
  • ベストアンサー率48% (99/204)
回答No.2

こんにちは。 さてご質問にあった ---------------- 『残り53495秒』 ---------------- ですが、もし残り時間を「秒」で求める方法がおわかりになるのであれば、これ自体を「時・分・秒」に直してしまって表示したほうがシンプルになるのではないかな?と思いました。 残り「時間」 = (残り秒数÷3600)の整数部分 残り「 分 」 = ((残り秒数-(残り「時間」× 3600))÷ 60))の整数部分 残り「 秒 」 = 残り秒数-(残り「時間」× 3600)-(残り「 分 」× 60) で変換できることと思います。ご検討を。

leap_day
質問者

お礼

御礼が遅くなってすみません 上記の計算方法試したところ、うまく表示することができました とりあえずこれでやってJavascriptでの計算方法も勉強していきたいと思います お世話になりました

その他の回答 (1)

noname#35109
noname#35109
回答No.1

検索したら 参考になるページがウジャウジャ出て来ますが。 イヌでもわかるJavaScript講座 「来年をカウントダウンする」 http://www.red.oit-net.jp/tatsuya/java/countdwn2.htm JavaScript訓練所 カウントダウン http://www004.upp.so-net.ne.jp/sekiuchi/js/contents/tcd.html [CJ-Club]-[JavaScript]-カウントダウン http://www.cj-c.com/java_s/java15.htm カウントダウン (3) http://www2s.biglobe.ne.jp/~Hiro/js/CountDown03.html 検索キーワード「カウントダウン JavaScript 秒」

leap_day
質問者

お礼

回答ありがとうございます 800字を超えてた為すべての説明をすることができていませんでしたm(--)m ご提示してもらったサイトはすべて見たことがありました(><) new Date(2112,8,3) のようにあらかじめ指定日設定されてますよね これを自動で修正することはできるでしょうか? ユーザーの行動によってこの指定日が違うので・・・ 行動をしてるとある確率でプレイベントが発生 その時間をファイルに保存 ファイルからそのデータを取得 その時間から12時間後までのカウントダウンを表示 カウントが0になったら新イベント発生 という流れなのですが・・・ よろしければnew Date(○,△,□)の操作の仕方が分かれば教えてください 勉強を始めたばかりなのでよろしくお願いします

関連するQ&A

  • カウントダウン タグだけが表示されません。

    レンタルサーバーは使えるねっと http://www.tsukaeru.net/ を使ってるのですが カウントダウンタグ(SSI)が表示されません。 カウントダウンタグは↓の通りです。 ---------------------------- /usr/bin/perl ues strict; use Time::Local; #2006/1/1 00:00:00を目的日時とする場合 my $end_time = timelocal(0,0,0,1,0-1,2006-1900); my $countdown = $end_time - time; my $days = int($countdown / (60*60*24)); my $hour = int($countdown % (60*6024))/(60*60)); my $tmp_min=int(($countdown % (60*60*24))%(60*60)); my $min = int($tmp_min / 60); my $sec = $tmp_min % 60; print<<"EOM"; $days日と$hour時間$min分$sec秒 EOM exit; 1; -------------------------------- ↓のように書いて別のページにカウントダウンを表示させようとしてます。 <!--#exec cmd="./countdown.shtml" --> ご指南のほどよろしくお願いします。

    • ベストアンサー
    • CGI
  • javascriptによるカウントダウンタイマー制作

    只今、javascriptでカウントダウンタイマーを制作しています。 ボタンをクリックすると動いているカウントダウンタイマーに10秒追加するようにしたいのですが、いろいろためしてみたのですがうまくいきません。散々悩んでいるうちに2日もたってしまいました。 御存じの方、いらっしゃいましたらどうか教えていただけませんでしょうか? <script type="text/javascript"> <!-- if (window.attachEvent){ window.attachEvent('onload', showday); }else { window.addEventListener('load', showday , false); } function settime1(){ var year =2011; //年 var mon =4; //月 var day =2; //日 var time =20; //時 var min = 20; //分 var sec = 15; //秒 var xday = new Date(year,mon-1,day,time,min,sec); //基準になる年月日 return xday; } function showday() { var nowday = new Date(); var xday = new settime1(); var passtime= xday.getTime()-nowday.getTime(); //今から基準になる日までの経過時間 1/1000秒単位 var cnt_day = Math.floor(passtime/(1000*60*60*24)); // カウントダウン表示 (日にち) の取得 passtime = passtime -(cnt_day*(1000*60*60*24)); // 経過秒から(日にち)を引く var cnt_hour = Math.floor(passtime/(1000*60*60));// カウントダウン表示 (時) の取得 passtime = passtime -(cnt_hour*(1000*60*60)); // 経過秒から(時)を引く var cnt_min = Math.floor(passtime/(1000*60)); // カウントダウン表示 (分) 取得 passtime = passtime -(cnt_min*(1000*60));// 経過秒から(分)を引く cnt_sec = Math.floor(passtime/1000);// カウントダウン表示 (秒) 取得 passtime = passtime -(cnt_sec*(1000)); // 経過秒から(秒)を引く var cnt_millisec = Math.floor(passtime/10); // カウントダウン表示 (100/1秒) 取得 // 分、秒、ミリ秒を2桁で表示する。 if(cnt_min<10){cnt_min = '0' + cnt_min;} if(cnt_sec<10){cnt_sec = '0' + cnt_sec;} if(cnt_millisec<10){cnt_millisec = '0' + cnt_millisec;} if((xday - nowday) > 0){ document.tbox.dspday.value = cnt_hour+":"+cnt_min+":"+cnt_sec; }else { document.tbox.dspday.value = "終了" } timerID = setTimeout('showday()', 1000); } </script> </head> <body> <form name="tbox" action="#"> <input name="dspday" id="dspday" type="text" style="position:absolute; top:475px;left:55px; font-size : 25px; z-index:3; color:navy; background:transparent; border-width : 0px ;border-style : solid;font-weight :bold ;" size="45" /> <input name="dspdaybtn" type="button" onClick="" value="10秒追加" style="position:absolute; top:510px; left:70px; z-index:4;"/> </form>

  • Perl 水曜日に処理を変えたい

    人の作ったものですが、月曜午前0時で処理を切り替えるようになっています。 これを水曜午前0時に変更するにはどうすればいいでしょうか? 長いですがよろしくお願いします。 sub GetNextWDayTime { my $time = time; my ($sec, $min, $hour, $wday) = (localtime($time))[0,1,2,6]; my $now = ($wday * 60 * 60 * 24) + ($hour * 60 * 60) + ($min * 60) + $sec; my $next = ($_[0] * 60 * 60 * 24) + ($_[1] * 60 * 60) + ($_[2] * 60) + $_[3]; #if $next is small, $next is next week. if($next < $now){ $time = $time + (60 * 60 * 24 * 7); } $time = $time + (($_[0] - $wday) * 60 * 60 * 24); $time = $time + ($_[3] - $sec); $time = $time + (($_[2] - $min) * 60); $time = $time + (($_[1] - $hour) * 60 * 60); return $time; } sub GetLastWDayTime { my $time = time; my ($sec, $min, $hour, $wday) = (localtime($time))[0,1,2,6]; my $now = ($wday * 60 * 60 * 24) + ($hour * 60 * 60) + ($min * 60) + $sec; my $last = ($_[0] * 60 * 60 * 24) + ($_[1] * 60 * 60) + ($_[2] * 60) + $_[3]; #if $last is large, $last is next week. if($last > $now){ $time = $time - (60 * 60 * 24 * 7); } $time = $time + (($_[0] - $wday) * 60 * 60 * 24); $time = $time + ($_[3] - $sec); $time = $time + (($_[2] - $min) * 60); $time = $time + (($_[1] - $hour) * 60 * 60); return $time; }

    • ベストアンサー
    • Perl
  • CGIについて(時間表示)

    CGI初心者ですが、掲示板を作成中です。投稿するたびにメッセージの投稿時間がすべて現在時刻に書き換わります。 メッセージ毎に時間表示させたいのですが、いかのプログラムのどこを変更すればよいのでしょうか?宜しくお願いいたします。 # 時間処理 sub totime { ($sec,$min,$hour,$mday,$month,$year,$wday,$yday,$isdst) = localtime(time); $year +=1900; $month++; $year = sprintf("%04d", $year); $month = sprintf("%02d", $month); $mday = sprintf("%02d", $mday); $hour = sprintf("%02d", $hour); $min = sprintf("%02d", $min); $sec = sprintf("%02d", $sec); $date = "$month/$mday $hour:$sec"; }

    • ベストアンサー
    • CGI
  • 掲示板への書き込み時間

    掲示板CGIについて質問です。 使おうとしているスクリプトはそのままアップロードすると書き込みした時間の表示が 「4/14 (Sun) 17:10」 のようになります。 これを 「2003 4/14 (日) 17:10:50」 のように年と秒まで加えたいのです。 それで後者のように表示される掲示板CGIを参考にしてみましたが、目立った違いはないように思え、どこをどう変更すれば年や秒まで表示されるようになるかわかりません。 思い当たる部分はこのあたりなのですが…。 ↓このように記述されています ************ $ENV{'TZ'} = "JST-9"; ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time); $year = sprintf("%02d",$year + 1900); $month = sprintf("%02d",$mon + 1); $mday = sprintf("%02d",$mday); if ( substr($month,0,1) == 0 ) { $month =~ s/0/ /; } if ( substr($mday,0,1) == 0 ) { $mday =~ s/0/ /; } $hour = sprintf("%02d",$hour); $min = sprintf("%02d",$min); $sec = sprintf("%02d",$sec); $youbi = ('Sun','Mon','Tue','Wed','Thu','Fri','Sat') [$wday]; $date_now = "$month/$mday ($youbi) $hour:$min"; ************ CGIに手を加えてレイアウトの変更くらいはいつもやっています。 もし書き換える方法がありましたら教えていただければと思います。 どうぞよろしくお願い致します。

    • ベストアンサー
    • CGI
  • localtimeについて

    まだCGIを勉強はじめのなのですが、localtimeについて質問させてください。 書籍で時間取得には ($sec,$min,$hour,$mday,$mon,$year,$wno) = localtime(time); とし、time関数で得たものをlocaltime関数で整形 といった事が書かれています。 まずわからないのが最初の ($sec,$min,$hour,$mday,$mon,$year,$wno) = の部分なのですが、カッコ内に変数を並べるというのはどういった命令なのでしょうか?書籍ではここまででこのような使い方や記述は出てきていないので、それ自体がよく理解できずにいます。それとも($sec,$min,$hour,$mday,$mon,$year,$wno) = localtime(time);をおきまりパターンとしてワンセットで覚えるべき事なのでしょうか。 続いてlocaltime(time)ですが、これは()内のtime関数によって取得された1970年基準からの秒数を、localtimeによって英語圏での標準的な日付時間表記に直して表示するという事で良いのですよね? これが、なぜ ($sec,$min,$hour,$mday,$mon,$year,$wno) とすることで各変数に割り振ることができるのかがよく分かりません。 これらはおきまりパターンとして覚えるべき事なのでしょうか?それとも配列のようにあるパターンに乗っ取って書かれ得いる事で他に応用がきくような意味合いのものなのでしょうか? ご教授いただきたく思います。 よろしくお願いします。

    • 締切済み
    • CGI
  • Perlスクリプト (); wantarry, (localtime)[0..2]; について。

    人様の作ったスクリプトの解析をしています。 下記のスクリプトについて質問があります。 my $now = zikoku(); print "$now です。\n"; sub zikoku { my ($sec, $min, $hour) = (localtime)[0..2]; if (wantarray) { return ($hour, $min, $sec); } else { return sprintf "%02d:%02d:%02d", $hour, $min, $sec; } } まず、zikoku(); の部分なのですが、現在自分はサブルーチンは&で呼び出すものとしか認識しておらず、ここではどのような用法で使われているのかがわかりません。();は何なのでしょうか?? また、localtime関数の次の[0..2]の意味が分かりません。 そして、wantarray関数自体の働きは一応理解しているのですが、ここではwantarray関数にどのような意味があるのかが分かりません。 分かる方いらっしゃいましたらご教授頂けると幸いです。よろしくお願いします。

    • ベストアンサー
    • Perl
  • 1秒未満間隔のファイル更新について

    皆様 下記のようなプログラム(Perl)で、1秒未満のファイル更新を試みております。sleep(1)として、待ち時間を1秒とすると、data.txtに時刻が更新されますが、sleep(0.8)、sleep(0.5)等として待ち時間を1秒未満にすると、プログラムは動作するのですが、data.txtはファイルとして作成されません。 これは、printf()関数のバッファリング、及びフラッシュに関する仕様に起因するものと思われますが、1秒未満の間隔でdata.txtを更新して時刻をdata.txtに書き込む処理は可能でしょうか? #強制フラッシュの"$| = 1;"を使い、sleep(0.8)としても駄目でした。 すみませんが、よろしくお願いします。 (コード) #use Time::HiRes; #$| = 1; while(){ ($sec, $min, $hour, $day, $mon, $year) = localtime(time); open(OUT, "> data.txt"); printf(OUT "%2s:%2s:%2s\n", $hour, $min, $sec); close(OUT); sleep(1); }

  • Perlでの Timeの足し算

    時間の足し算をやりたい。訳あってライブラリが使えません。 方法は無いでしょうか? 仮にライブラリが使えるなら、下記のようでうまく行っています。 --------------------------------------------------- use Time::Local; $year=2008; $mon =10; $mday=24; $hours = 23; $min = 0; $sec = 0; $time = timelocal($sec, $min, $hours, $mday, $mon - 1, $year); $a1=($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime($time ); $mytimeORG= sprintf("%04d/%02d/%02d %2d:%2d", $year + 1900, $mon +1, $mday,$hour,$min); print "$mytimeORG\n"; ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime($time + 32400); #9H加算 $mytime9H= sprintf("%04d/%02d/%02d %02d:%02d", $year + 1900, $mon +1, $mday,$hour,$min); print "$mytime9H\n"; ---------------------------------------------

    • ベストアンサー
    • Perl
  • javascriptのスタイル指定?

    下記の記述の、「残り」「時間」「分」「秒」にそれぞれスタイルを追加したいです。 ----------------------------- document.tbox01.dspday01.value = "残り"+cnt_hour+"時間"+cnt_min+"分"+cnt_sec+"秒"+cnt_millisec ----------------------------- イメージとしては、下記のように記述して、 ----------------------------- document.tbox01.dspday01.value = "<span class="hoge01">残り</span>"+cnt_hour+"<span class="hoge02">時間</span>"+cnt_min+"<span class="hoge03">分</span>"+cnt_sec+"<span class="hoge04">秒</span>"+cnt_millisec ----------------------------- CSSでスタイルを指定したいのですが、可能でしょうか?