- ベストアンサー
時間処理について
とあるゲームの内部時間をPHPでテキストとして表現したいのですが、 検索しても「現実時間(リアルタイム)」のみしか計算方法や算出方法しか 掲載されていません。 例えば、+2秒毎に1秒乗算させて60秒を超えたら、1分と判定し、60分超えたら、 1時間と判定し、24時間越えた場合は、設定で(1月1日)としたら、2日する。 みたいなオリジナルの時間を書きたいのです。 如何すれば良いでしょうか?
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
そんなもん、自分で作ればよいのでは? こんな感じで。 <?php class Converted_Time { /** * constructor of Converted_Time. * * @param double $mag magnifier of time. (<1 to slower, >1 to faster) * @param int $base base time to calculate difference. * @param int $epoch epoch time in converted time world. */ function __construct($mag, $base, $epoch = null) { $this->mag = $mag; $this->base = $base; if ($epoch == null) { $epoch = $base; } $this->epoch = $epoch; } /** * Returns converted time. * * @access public * @param int $timestamp timestamp to be converted. * @return int converted timestamp. */ function getTime($timestamp = null) { if ($timestamp == null) { $timestamp = time(); } $diff = $timestamp - $this->base; return $this->epoch + $diff * $this->mag; } } date_default_timezone_set('Asia/Tokyo'); $base = strtotime('-1 day'); $epoch = strtotime('2001-02-03 04:56:07 JST'); $mytime = new Converted_Time(0.5, $base, $epoch); $t = strftime("%Y-%m-%dT%H:%M:%S", $base); echo "base : $t\n"; $t = strftime("%Y-%m-%dT%H:%M:%S", $epoch); echo "epoch : $t\n"; $t = strftime("%Y-%m-%dT%H:%M:%S", $mytime->GetTime()); echo "converted: $t \n"; ?> このプログラムだと、現実世界とくらべて0.5倍の速さで時間が進む世界で、昨日からゲームを開始したとして、ゲーム内時刻が2001-02-03 04:56:07 JSTからスタートした場合の時刻を計算していますが。 $magの値を変化させれば2倍の速さで時間が進む世界も、1/10の速さで時間が進む世界も作れますが。
お礼
すばらしいです!回答ありがとうございます