PHPで秒単位の値を「時間:分:秒」の型に変換したいと思っております。(例:「3661」→「1:1:1」)

そのための関数としてdate(),strftime(),gmstrftime()を考えましたが、
これらの関数は時刻を扱う関数であるため、24時間になると0時間となってしまいます。
この問題を解決する方法として、自作関数を作成するという方法がありますが、
もし存在するならば標準関数を利用したいと思います。
秒数を「時間:分:秒」の型に変換する関数で、24時間以上の値も変換できる標準関数が
あるかどうかを教えて下さい。宜しくお願いします。

回答の条件
  • 1人5回まで
  • 登録:2011/09/19 18:15:59
  • 終了:2011/09/20 23:51:09

ベストアンサー

id:windofjuly No.3

うぃんど回答回数2625ベストアンサー獲得回数11492011/09/19 19:27:44

ポイント40pt

標準関数は日付と時刻関連の関数用に定義されている書式に従ってますので、残念ながらお望みの関数は存在していません

http://www.php.net/manual/ja/datetime.formats.php

 

関数は存在しませんが、下記のような簡単な式(数値は適当です)で実現できます

自作関数にするかどうかは利用頻度次第といったところでしょう

<?php
$a = 25 * 3600 + 2450;
echo floor($a / 3600) . gmdate(":i:s", $a);
id:kazu_at_jp

回答、ありがとうございます。

2011/09/20 23:50:06

その他の回答(2件)

id:y-kawaz No.1

y-kawaz回答回数1420ベストアンサー獲得回数2252011/09/19 18:53:53

ポイント34pt

そのような標準関数はないので自作しましょう。

そもそも24時間以上はどう表現したいんでしょうか?50時間30分5秒とか?2日6時間50分5秒で良いならdateやstrftime等の標準関数でも可能かもしれないが0日とか0時間を削る処理が必要ならやはり自作関数を作ることになる。

id:kazu_at_jp

回答、ありがとうございます。

2011/09/20 23:49:46
id:GundamAGE No.2

G.Age回答回数17ベストアンサー獲得回数12011/09/19 18:54:41

ポイント34pt

24時間以上の値も変換できる標準関数があるかどうか

ありません。


また、date(),strftime(),gmstrftime()は、ご承知のように、「日時」を表示するものですので、秒数を時分秒に変換するには適しません。大多数のPHP処理系では0時0分0秒から始まるUNIX TIMEからスタートするので見かけ上、問題は生じませんが、万が一、これ以外のスタート時間を持つ処理系では正常に動作しないことになるからです。

どのような用途でご利用になるかは存じませんが、仕様書にある以外の使い方には十分な注意が必要です。


やはりユーザー関数として用意するのが無難かと存じます。

参考として、秒数を配列(時,分,秒)に変換する関数の例を以下に掲げます。

<?php
//秒->array(時,分,秒)
function hms($sec) {
	$ss = $sec % 60;
	$mm = (int)($sec / 60) % 60;
	$hh = (int)($sec / (60 * 60));
	return array($hh, $mm, $ss);
}

list($hh, $mm, $ss) = hms(25 * 3600 + 26 * 60 + 27);
printf("%d:%02d:%02d", $hh, $mm, $ss);
?>
id:kazu_at_jp

回答、ありがとうございます。

2011/09/20 23:49:57
id:windofjuly No.3

うぃんど回答回数2625ベストアンサー獲得回数11492011/09/19 19:27:44ここでベストアンサー

ポイント40pt

標準関数は日付と時刻関連の関数用に定義されている書式に従ってますので、残念ながらお望みの関数は存在していません

http://www.php.net/manual/ja/datetime.formats.php

 

関数は存在しませんが、下記のような簡単な式(数値は適当です)で実現できます

自作関数にするかどうかは利用頻度次第といったところでしょう

<?php
$a = 25 * 3600 + 2450;
echo floor($a / 3600) . gmdate(":i:s", $a);
id:kazu_at_jp

回答、ありがとうございます。

2011/09/20 23:50:06

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません