3
    $test=strtotime("06:30:00")+strtotime("03:00:00");

    echo gmdate("H:i:s", $test);

これは間違った答えを与えます ( 23:01:44 )。

    $test=strtotime("06:30:00")-strtotime("03:00:00");

    echo gmdate("H:i:s", $test);

同じコードを差し引くと正しい答えが得られます( 03:30:00 )。

4

4 に答える 4

3

これを行う必要があります:

<?
echo date("H:i:s", strtotime("06:30:00 + 3 hour"));
echo date("H:i:s", strtotime("06:30:00 - 3 hour"));
?>
于 2013-10-11T10:20:37.733 に答える
1

あなたの論理は間違っています。最初のサンプルのように振る舞う場合は、2 つのタイムスタンプをそのまま (つまり 0 から開始) 合計するので、前の時間を 2 回カウントすることになります。ただし、それらを減算する場合は、各オペランドの前のピリオドが別のピリオドを除去するため、「期待される」結果が得られます。

しかし、それはそれが機能するはずの方法ではありません。PHP で日付と期間を操作するには、 DateTime API を使用する必要があります。

于 2013-10-11T10:19:23.813 に答える
0
 $date1 = strtotime('2012-05-01 12:00:00');
 $date2 = time();
 $subTime = $date1 - $date2;
 $y = ($subTime/(60*60*24*365));
 $d = ($subTime/(60*60*24))%365;
 $h = ($subTime/(60*60))%24;
 $m = ($subTime/60)%60;

 echo "Difference between ".date('Y-m-d H:i:s',$date1)." and ".date('Y-m-d H:i:s',$date2)." is:\n";
 echo $y." years\n";
 echo $d." days\n";
 echo $h." hours\n";
 echo $m." minutes\n";
于 2013-10-11T10:23:33.340 に答える
0

私は同様の問題に遭遇し、(さまざまな方法でフォーマットされた) 時間を秒に変換する小さな関数を作成しました。明らかに、秒を足し合わせるのは簡単です。

function getSeconds($s) {
    $s = str_replace('h',':',$s);
    $s = str_replace(',','.',$s);

    $a = explode(':',$s);
    $n = count($a);

    if ($n==1)
        return $a[0]; //just seconds

    if ($n==2)
        return $a[1] + 60 * $a[0]; //minutes and seconds

    if ($n==3)
        return $a[2] + 60 * $a[1] + 3600 * $a[0]; //hours minutes and seconds
}

次の形式で機能します。

 12
 12.34
 12:34 (will assume mm:ss in this format)
 12:34.56
 12:34,56
 12:34:56.78
 12h34:56,78
于 2013-10-11T10:22:56.947 に答える