- ベストアンサー
指定速度で経過する日時表示スクリプトを作りたい
- PHP初心者が指定速度で時間経過する日時表示スクリプトを作成したいと考えています。経過速度や経過時間を自由に指定できるようにしたいのですが、どの関数やアプローチを使えば良いかわからず困っています。
- getdate()やmktime()、strtotime()などを試しましたが、望んだ動作を得ることができませんでした。似たようなスクリプトを検索しても見つからず、情報を得ることができません。ヒントやアイディアをいただけると助かります。
- どなたか経験者からのアドバイスや考え方をいただきたいです。初心者でも理解しやすいような簡単なヒントでも構いません。お願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
大体分かりました。 まず、基準となる最初の時間を取得します。 で、その時間をどこに保存するのかが第一点。 サーバか、クッキーかになるでしょう。 (クッキーがベターかと思います。) で、進み方が1/2ならば、 保存した基準時間と現在時間の差を取り(実質進んだ時間)、それを1/2にしてやり、現在時間に足してやります。 これは表示する基準((a),(b),(c),(d))が変わるまで続けます。 (途中で時間を足してしまうと時間が狂うかもしれないので速度基準を変えたら時間を更新する) 時間が早い場合は*2してやればいいだけですね。 で、基準を変えたとき(表示時間を保存した次)から、基準を変えた時間の現在時間と今持っている表示時間とを持ちます。 表示時間と、時間の速度の設定を変えた時間を別に持っておくということです。 で、速度基準速度から現在時間の差を取り、表示時間に足せばいいわけです。 分かりづらいと思いますが、わかったでしょうか。
その他の回答 (1)
- moon_night
- ベストアンサー率32% (598/1831)
自分の理解が足りないのか、言っている意味がわかりませんでした。 一時間経過とか30分経過とかはどのように知るのでしょうか? 現在時間でしょうか? それともある時間を指定してと言うことでしょうか? あと、経過速度というのはなんでしょうか? 単に時間を動かしたい場合は date("Y-m-d H:i:s",time()+60*60*1); # 現在から一時間後 とすればいいかもしれません。
補足
説明が解り難くて申し訳ないです、回答して下さって有難うございます。 >一時間経過とか30分経過とかはどのように知るのでしょうか? >現在時間でしょうか? >それともある時間を指定してと言うことでしょうか? 理解力不足で少し質問の意図が解らなかったのですが、現在時間、だと思います。 [補足] プログラムを○分(秒)おきにリロードして、javascriptの時計のように表示させたいと思っています。 >あと、経過速度というのはなんでしょうか? 2倍や1/2ということなのですが、例えば、 (a) 現在時間 = date()などの関数で取得できる時間 ⇒(b) 経過速度 = 1/2 (c) 表示時間 = 現在時間×(b)(?) (d) (c)を適用させる時間帯(現在時間で)12時~16時 と設定したとして、11時59分まではそのまま(a)が表示され、 12時00分になったら(c)が表示されるというようにしたいのです。 11:59まで → (a)をそのまま表示 (a) | 表示 10:00 | 10:00 11:00 | 11:00 : | : 11:59 | 11:59 : | : 12:00から → (c)を表示 (a) | 表示 12:00 | 12:00 12:01 | 12:00 12:02 | 12:01 : | : 12:10 | 12:05 : | : 13:00 | 12:30 14:00 | 13:00 15:00 | 13:30 : | : 15:59 | 13:59 16:00から → (c)の適用を外した時間(?)を表示※ (a) | 表示 16:00 | 14:00 16:01 | 14:01 16:02 | 14:02 : | : 17:00 | 15:00 18:00 | 16:00 : | : ※(b)が1以下なら(a)-(d)の時間数×(a)で、(b)が1以上なら(a)+(d)の時間数×(a)…? >単に時間を動かしたい場合は >date("Y-m-d H:i:s",time()+60*60*1); # 現在から一時間後 >とすればいいかもしれません。 アドバイス有難うございます、上の例を実現するのには date("Y-m-d H:i:s",time()*0.5) という感じでしょうか(少し近づいたような気がします)。 あと(d)の「時間帯の指定」を実現するためにif構文などいじってみたいと思います。
補足
なるほど、基準時間を保存しておくのですね、なるほど…。 難しいですが(自分が初心者なだけで)充分解り易いです、こう考えればいいのかと、大変助かりました。 >まず、基準となる最初の時間を取得します。 >で、その時間をどこに保存するのかが第一点。 >サーバか、クッキーかになるでしょう。 >(クッキーがベターかと思います。) >で、進み方が1/2ならば、 >保存した基準時間と現在時間の差を取り(実質進んだ時間)、それを1/2にしてやり、現在時間に足してやります。 とりあえずここまでを書いてみたのですが、以下のソースで問題ないでしょうか。 いえ、というより、ブラウザの表示結果から見て問題なさそうです…多分(報告)。 [clock-set.php](クッキーセット用php) <?php $nowtime = date("Y/m/d H:i:s");//現在時間 //クッキーに基準時間を保存します if (!isset($_COOKIE["basetime"])) { setcookie("basetime", "$nowtime"); } //表示用phpにジャンプします header("Location: clock-view.php"); ?> [clock-view.php](表示用php) <?php $nowtime = date("Y/m/d H:i:s"); //現在時間 $speed = 0.5; //経過速度 //クッキーから基準時間を取り出します $basetime = $_COOKIE["basetime"]; echo "<p>保存した時間 {$basetime}</p>"; //基準時間と現在時間の差(実質進んだ時間) $lag = strtotime($basetime) - strtotime($nowtime); echo "<p>実際の経過時間 {$lag}</p>"; //実質進んだ時間を1/2します(*0.5) $plustime = $lag * $speed; echo "<p>1/2した経過時間 {$plustime}</p>"; //現在時間に1/2した時間を足します $viewtime = date("Y/m/d H:i:s", time() + $plustime); echo "<p>表示する時間 {$viewtime}</p>"; //実際の時間 echo "<p>実際の時間 {$nowtime}</p>"; ?> [ブラウザでの表示結果] 保存した時間 2006/08/29 22:00:02 実際の経過時間 -386 1/2した経過時間 -193 表示する時間 2006/08/29 22:03:15 実際の時間 2006/08/29 22:06:28 引き続き基準を変えたときの処理の記述を考えようと思います。 なんというか道が開けてきた感じでほっとしました…有難うございました。