2016-05-02 24 views
0

dateDiffを照会した時刻と現在の時刻を秒単位で変換した後、DateTimeを変換したいと思います。それ、どうやったら出来るの?私は現在、それをhh:mm:ssとしています。DateTimeからの総秒数の取得

$row = mysqli_fetch_array($sql, MYSQL_ASSOC); 
$statusTime = $row['date']; 

$dteStart = new DateTime($statusTime); 
$dteEnd = new DateTime($currentTime); 
$dteDiff = $dteStart->diff($dteEnd); 
echo $dteDiff->format('%H:%I:%S'); 
+0

DateInterval :: format()メソッドが引き継が再計算しません。タイムストリングや日付セグメントのポイント。これは、「1か月と4日」から「1か月と1日」のいずれかと解釈される「32日」のような値をオーバーフローさせることができないためです。 –

答えて

0

Strtotimeだから1月1970

の1からあなたの時間を秒単位で与えるトリックを行う必要があります:あなたは必要がない限り、ここでのdatetimeのための必要性を全くありません

$statustimeUNIX = Strtotime(date("hh:mm:ss",$statusTime)); 
$currenttimeUNIX = Strtotime(date("hh:mm:ss", $currentTime)); 

$DiffInSeconds = $currenttimeUNIX - $statustimeUNIX; // or if it's supposed to be the other way around maybe? 

何かのためにそれは?

EDIT:

$statustimeUNIX = Strtotime(date("hh:mm:ss",$statusTime)); 
$currenttimeUNIX = Strtotime(date("hh:mm:ss", $currentTime)); 

$DiffInSeconds = $currenttimeUNIX - $statustimeUNIX; 
If($DiffInSeconds > 300 || ($DiffInSeconds > -86100 && $DiffInSeconds < 0)){ 
    Echo "inactive"; 
}else{ 
    Echo "active"; 
} 
+0

@Alan、質問:あなたはhhmmssタイムスタンプしか持っていないのですか、それともあなたがやりたいことですか?これは、querytimeが23:59:59で、currenttimeが00:00:01であるとすると、負の値になります。できる場合は、「Y-m-d」も使用してください。または、時間値を調べ、負の値を取得しないように時間が何であるかに応じて「Ymd」を追加する必要があります。 – Andreas

+0

私は、mysqlタイムスタンプ形式で作業しています。私は、心拍の検出のようなものを作成しようとしています。私のラズベリーパイは私のmysqlデータベースに絶えず書いており、ラズベリーパイが書き込むたびに日付カラムが更新されます。だから私は現在の時間とクエリ時間の差が5分を超えているかどうかを検出したいのですが、それはオフラインであることをエコーし​​ます – Alan

+0

@Alanその場合、あなたは本当に日付か偽の日付が必要です。あなたが言ったように、それが300秒を超える場合、それは '-86300'秒の場合はどうなりますか?それは真夜中の〜1.5分の違いです。 – Andreas

1

strtotime()は、UNIXのタイムスタンプを返す関数を使用できます。

strtotime($dteDiff->format());

0

2つのDateTimeオブジェクト間の秒を取得する最も簡単な方法は、単純な引き算を行うことです: -

$dteStart = new DateTime($statusTime); 
$dteEnd = new DateTime($currentTime); 
$seconds = $dteEnd->getTimestamp() - $dteStart->getTimestamp(); 
関連する問題