2016-05-17 8 views
1

私は00:30:30のようなdate_diff()時間を持っています。私は0.30Hourのような唯一の時間に変換したい。 私は、怒鳴るのコードを使用している (時:分:秒)から時を10進数に変換する方法

<code> 
    $start=date_create($tempStart_emp); 
    $end=date_create($current_date); 
    $diff=date_diff($start,$end); 
    echo $diff->format("%H:%I:%S");//00:30:30 
</code> 

私の予想outpur://0.30Hour はそれが可能です?

+0

いいえ、時間形式はあなたのためにできませんでした。手動で行う必要があります。 –

+1

'echo $ diff-> format("%H.%i ");'おそらく? –

+3

'00:30'を' 0.30'にし、10進数を '0.50'にしませんか? – C2486

答えて

3

希望する出力は、0.5 - 30時間と仮定します。 0.30が必要な場合は、書式文字列の:をドット.に置き換えることができます。

あなたは開始時刻と終了時刻のタイムスタンプを減算することにより間隔を秒単位で取得することができます:

$diff_s = $end->getTimestamp() - $start->getTimestamp(); 

をそしてちょうど少数時間を取得するために3600で割る:

$diff_h = $diff_s/3600; 
echo round($diff_h, 2); 

参照をideone.comの作業例。

コメントで議論をまとめると:

もちろん、タイムゾーンと夏時間シフトが常に問題で、日付と時刻を扱うとき。 DateTimeオブジェクトの作成に適切なタイムゾーンを考慮している場合、この回答のタイムスタンプの差分は、となります。(*)の間が渡されます。そして、これは時間と異なる場合があります一見があなたの壁時計に合格しました。

(*)時間は本当にになりましたか?残念ながら、そうではありません。秒を飛ばすことになると、2つのUnixタイムスタンプの違いは、必ずしも渡される秒数ではありません。少なくとも、この性質の誤差は比較的小さい。それについての詳細はこちらを参照してください。Unix time and leap seconds

+0

$ diffはオブジェクトです... .... intを変換しません.... は機能しません。 –

+0

小さなタイプミスです。もちろん、$ diff_sを3600で割る必要があります。これはちょうどintです。getTimestampは指定されたDateTimeオブジェクトのunixタイムスタンプをintとして返します。私は例へのリンクを追加しました。 – DerVO

+0

間隔が夏時間シフトの場合は、これは失敗します。 –

関連する問題