0

このコードを使用して、2 つの日付の差を時間と分で計算します。

$all = round(($date1timestamp - $date2timestamp) / 60);
$d = floor ($all / 1440);
$h = floor (($all - $d * 1440) / 60);
$m = $all - ($d * 1440) - ($h * 60);

完全に機能しますが、日付の差を計算するために複数回必要な場合は、コードを再度記述して値を変更する必要があります。コードを再度書き直さずに複数回計算する簡単な方法はありますか??

4

3 に答える 3

6

試す:

関数:

function date_difference ($date1timestamp, $date2timestamp) {
$all = round(($date1timestamp - $date2timestamp) / 60);
$d = floor ($all / 1440);
$h = floor (($all - $d * 1440) / 60);
$m = $all - ($d * 1440) - ($h * 60);
//Since you need just hours and mins
return array('hours'=>$h, 'mins'=>$m);
}

関数の呼び出し:

$result = date_difference($date1timestamp, $date2timestamp);
于 2012-11-06T15:25:24.713 に答える
2

私があなたを正しく理解していれば、このコードを関数にカプセル化する必要があり、それを書き直すのではなく、必要なときにいつでも関数を呼び出すことができます。

function dateDiffHoursMins($date1timestamp, $date2timestamp)
{
   $all = round(($date1timestamp - $date2timestamp) / 60);
   $d = floor ($all / 1440);
   $h = floor (($all - $d * 1440) / 60);
   $m = $all - ($d * 1440) - ($h * 60);

   return array('d' => $d, 'h' => $h, 'm' => $m);
}

dateDiffHoursMins()これを使用するには、2 つのタイムスタンプを呼び出して渡すだけです。配列を返すので、次のように値を取得できます。

$diff = dateDiffHoursMins($time1, $time2);
$hours = $diff['h'];
echo("Hours: " . $hours);

コードを関数にカプセル化するこのプロセスは、多くの場合、コードをDRYに保つと呼ばれます。これはDont Repeat Yourselfの頭字語です。これは常に努力すべき目標です。これにより、コードの記述が速くなり、デバッグが容易になります。ファイル全体でそのスニペットを 20 回コピー アンド ペーストし、バグを見つけたとします。20 か所すべてを修正する必要がありますが、関数では 1 か所だけ修正する必要があります。

于 2012-11-06T15:23:41.007 に答える
-1

これを実行するための良い方法は、秒単位で考えることです。

最初のステップは、SQLでタイムスタンプの差を秒単位で取得することです($ dbcは私のデータベース接続です)。

$timeQuery= mysqli_query($dbc,
                "SELECT TIMESTAMPDIFF(second,TIME1,TIME2) AS DIFF,

そしてそれを変数に割り当てます

while ($row = mysqli_fetch_array($timeQuery)) {
    $totalTime = $row["DIFF"];

そして、変換を開始します。

//Seconds in an hour
$unith =3600;       
//Seconds in a minute
$unitm =60;

//Number of hours and then the seconds remaining for minute calc
$hh = intval($totalTime / $unith);    
$ss_remaining = ($totalTime - ($hh * 3600));        
//Number of minutes and then the seconds remaing        
$mm = intval($ss_remaining / $unitm);    
$ss = ($ss_remaining - ($mm * 60));

そして、あなたはそれを次のように印刷することができます:

$hh . ' : ' . $mm . ' : ' . $ss
于 2012-11-06T15:27:47.137 に答える