2016-09-05 13 views
1

私は人間が読める文字列として日数と時間数を表示したいと思いますが、1日は7時間と等しいので、就労日が必要です。就業時間を就業日に変換するにはどうすればいいですか?

私はこの解決策を見つけましたが、24時間に等しい1日に基づいて:

function secondsToTime($seconds) { 
    $dtF = new \DateTime('@0'); 
    $dtT = new \DateTime("@$seconds"); 
    return $dtF->diff($dtT)->format('%a days, %h hours, %i minutes and %s seconds'); 
} 

ソース:Convert seconds into days, hours, minutes and seconds

+3

それは一日23〜25時間の長さであると仮定してのDateTimeはあなたを助けにはなりません。おそらくあなた自身のことをする必要があります。 – apokryfos

答えて

4

DateTimeは、ここでは助けにはなりません。あなた自身でそれを数える必要があります。

しかし、これは簡単な数学です。数日間の整数除算と数時間のモジュロ。

$hours = 12345; 

$days = floor($hours/7); 
$restHours = $hours%7; 

echo "{$days} days, {$restHours} hours"; //1763 days, 4 hours 
+0

また、基本的なマッチは数秒から数時間です。 –

+0

@JonStirlingはい、しかし、OPは ''日と時間の数時間を表示する 'と書いていたので、彼の関数は引数として秒単位で時間がかかるかもしれませんが、入力データです。 –

+1

ありがとう、私はそれが数学の問題だと思いますが、私はこの簡単な計算をすることができませんでした。私はモジュロの使用を常に忘れていました。 – abenevaut

1

カスタム(これを実装することができます上で、おそらく1000の方法の上で、私はこれが最善、または良いか、そのようなものであると主張していない)これに対処するためのコードを作りました。

function secondsToTime($seconds) { 
     $totalMinutes = intval($seconds/60); 
     $totalHours = intval($totalMinutes/60); 
     $totalDays = intval($totalHours/7); 
     echo "$totalDays days and ".($totalHours%7)." hours ".($totalMinutes%60)." minutes and ".($seconds%60)." seconds";    
} 

secondsToTime(8*60*60); 

プリント

1日と1時間0分0秒

+1

ご返信ありがとうございます – abenevaut

関連する問題