2016-11-24 11 views
-2

私はこのコードを使用して期間を計算しています。実際には、HH:MM:SSの2つの瞬間の間に時間を置いて、HH:MM:SS形式の結果が得られます。hh:mm:ss difference PHPで間違った返答を返します

$time1 = strtotime('00:00:00'); 
$time2 = strtotime('00:00:07'); 
$diff = $time2 - $time1; 
$diff = date('H:i:s', $diff); 

私は00:00:07を期待していますが、私は01:00:07を取得します。何が問題なの?

Irvin run hereと答えが正しいですが、ローカルマシンで同じコードを実行して間違っています! タイムゾーンか多分何らかの設定効果が結果になるのでしょうか?

+0

私のデモですべてうまくいきます。あなたとまったく同じコード。結果は「00:00:07」です。 https://eval.in/684340 – Irvin

+0

@Irvin、私はローカルマシンでここに走って、それは私に01:00:07を与える、それは狂っている!多分それはタイムゾーンに依存します!! –

+0

そうかもしれません。 – Irvin

答えて

0

strtotimedate機能の使用を中止してください。 DateTimeクラスを使用します。

あなたがよりよく検索したとしたら、2つの日付の違いを見つけることは既に全面的に行われています。たとえば、私の答えはhereです。少し、それは次のようになります変更:

$create_time = "00:00:00"; 
$current_time="00:00:07"; 

$dtCurrent = DateTime::createFromFormat('H:i:s', $current_time); 
$dtCreate = DateTime::createFromFormat('H:i:s', $create_time); 
$diff = $dtCurrent->diff($dtCreate); 

echo $diff->format("%H:%I:%S"); // to get HH:MM:SS format 

これは00:00:07 を返すより書式設定の詳細についてはDateInterval::formatを参照してください。

+0

@ノルデンハイム、私はそれを解決する答えを受け入れるだろう、あなたの答えは良いですが時折正しいフォーマットではなく、それは私のコードを停止する、私はそれが起こることを望んでいない、私の以前の方法では、 HH:MM:SSのような正しいフォーマットでは、それは私に内部エラーを与えません。オブジェクトの作成に失敗した場合のオブジェクトエラーを無視する方法を知っていますか? –

+0

@FarzadSalimiJazi 'error_reporting'の設定から始めて、あなたが持っているかもしれない設計や実装されていないアーキテクチャで終わる可能性のある答えがたくさんあります。すべてのコードに依存し、主要なリファクタリングが必要な場合があります。後者のアドバイスを得るには[コードレビュー](http://codereview.stackexchange.com/) –

+0

誰もが:私はちょうどコメントに混乱をたくさんきれいにしました。コメントは、議論の延長ではありません。 OOPが驚くかどうか、失敗した実験などについて、戦争の開始や終了に使用しないでください。ありがとうございました。 –

0

これは、時間2からマイナスの時間1になると7になります。

日付機能にはタイムスタンプが必要です.7はタイムスタンプではありません。

代わりにhttp://php.net/manual/en/datetime.diff.phpを使用して差異を計算できますか?

+0

しかし、私は7時00:00:07私を与える必要がありますと思う! –

0

ini設定のタイムゾーンの相違を本質的に相殺するUNIXエポックを考慮する必要があります。それはJan 1st '70です。 e, O or Pを追加することで、サーバー/アプリケーションのタイムゾーンの設定を確認できます。チェックthis code

$time1 = strtotime('00:00:00 +0000'); 
$time2 = strtotime('00:00:07 +0000'); 
$epoch = strtotime('01 Jan 1970'); 
$diff = $time2 - $time1; 
var_dump($time1,$time2,$epoch,$diff); 
$diff = date('H:i:s', $epoch+$diff); 
echo $diff; 
関連する問題