2017-06-24 9 views
0

私は日付とdatetimeを比較していますが、私は期待した結果を得ていますが、私の出力を表示するにはより良い方法があり、私の現在の出力についても質問がありますか?ここでPHPのdatetimeを比較する

は私の現在のコードの抜粋である:ここで私のデータベースに私の場合$dueDate

<?php 

$todayDate = date('Y-m-d'); 

$seconds = strtotime($todayDate) - strtotime($dueDate); 
$hours = $seconds/60/60; 
echo number_format($hours, 2); 
?> 

2017-06-26 09:11:28ので、出力は-57.19として表示されています。私の質問は、-を取り除き、時間の後にhを追加し、出力後にmを追加するというクリーンな方法がありますか?

57h 19m

だから、周りいじりの後、私はこれを行うために管理しているUPDATE

:今

substr($dateFormat,0,3).'h '.substr($dateFormat,4).'m';

出力は、私はまだ、この負のを持って-57h 19m

です文字、イムではないE ...

+0

を使用して60の倍数分でそれを引っ張る正の符号。 '.19'はそうではありません19分、11.4分です。 '.19 * 60'。 – chris85

+0

あなたがどういうことを言っているのかよくわからないのですか? – danjbh

+0

'$ dueDate'をあなたの質問と一緒に送って、DBが数学をするようにします。もし数学の部分が100ではなく60の小片から来たら、 – chris85

答えて

4
たとえば、このすべての場所とエバート方法

を使用することができます

は、DateTimeクラスを使用すると、

$dueDate = '2017-06-26 09:11:28'; 

$due = DateTime::createFromFormat('Y-m-d H:i:s', $dueDate); 
$today = new DateTime(); 

$diff = $today->diff($due); 

echo $diff->format('%hh %im'); 

結果、それは非常に簡単になります:

11h 37m 

しかし、あなたはタイムゾーンについて尋ねたとして、ここでは同様にそれらを追加する方法です。あなたorignial日は遠く、実際にいくつかの日であったとしても、私は後に日付を変換する分と時間を得るために、より正確な差出力に

$dueDate = '2017-06-25 00:00:00'; 

$due = DateTime::createFromFormat('Y-m-d H:i:s', $dueDate, new DateTimeZone('Europe/London')); 
$today = new DateTime('now', new DateTimeZone('Europe/London')); 

$diff = $today->diff($due); 

echo $diff->format('%R %hh %im').PHP_EOL; 

if ($diff->invert) { 
    echo $diff->format('Overdue by %dd %hh %im'); 
} else { 
    echo $diff->format('You have %dd %hh %im till overdue'); 
} 

結果

+ 1h 6m 
You have 0d 1h 6m till overdue 
+0

もちろん、あなたが[簡潔なもの](https://3v4l.org/bg0WO)全体に入っているならば。 –

+0

私が今見ることができる問題は、それが1時間遅れることです。 – danjbh

+0

@JaredFarrish思考私はこれがOPの初めのDateTimeクラスのイントロであると仮定したので、簡単かつステップバイステップを続けるでしょう。 – RiggsFolly

0

私のデータベースの日付が先の日であるので、それは私がそれを動作するように見えることはできません実際には正しいが、それは負の値を示した場合は、後に

$time = time(); 

日付整数を維持する必要があります

あなたは

$date1 = time(); 
$date2 = time(); 

$comparingdate = $date2 - $date1; 

$myFormat = date("T-m-d h:i:s",$comparingdate); // Show how you want 
+0

これはどういう意味ですか? 'time()'は私に 'now'タイムスタンプを与えますか?私はdatetimeとtime()関数をどのように比較できないのでしょうか? – danjbh

+0

@danjbh 'strtotime'は正しい形式に変換されます。これは基本的にあなたがすでに持っているものです。 – chris85

0

使用の床とラウンド機能を追加しましたたぶんhttps://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_timestampdiffをabs関数

<?php 
    $todayDate = date('Y-m-d'); 
    $dueDate = "2017-06-26 09:11:28"; 
    $seconds =abs(strtotime($todayDate) - strtotime($dueDate)); 
    $hours =floor($seconds/60/60); 
    $minutes= round($seconds/60/60 - $hours,2)*100; 
    echo "<br>"; 
    echo $hours. " H :"; 
    echo $minutes. " M "; 
    ?>