人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

●質問者: kazu_at_jp
●カテゴリ:コンピュータ ウェブ制作
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● y-kawaz
●34ポイント

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

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

◎質問者からの返答

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


2 ● G.Age
●34ポイント

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);
?>
◎質問者からの返答

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


3 ● うぃんど
●40ポイント ベストアンサー

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

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

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

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

<?php
$a = 25 * 3600 + 2450;
echo floor($a / 3600) . gmdate(":i:s", $a);
◎質問者からの返答

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

関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ