0

秒数を日付に変換し、時差を日、時間、秒として表示する必要があります。

しかし、何らかの理由で、数日後、次の丸一日前の最後の時間に、負の時間値が得られます。現在、この問題は、日付が 38 日を超えている場合に発生します (11 月 1 日より前)。明日はこの値が変わるかもしれませんが、わかりません。

コード:

$s = 84600; // 23.5 h in seconds
$s += (60*60*24)*38; // add 38 days in seconds
$d = (new \DateTime())->modify("-".$s."seconds");
echo (new \DateTime())->diff($d)->format("%a days %h:%I");
// shows: 38 days -1:30

1日の違いがある同じコード:

$s = 84600; // 23.5 h in seconds
$s += (60*60*24)*37; // add 37 days in seconds
$d = (new \DateTime())->modify("-".$s."seconds");
echo (new \DateTime())->diff($d)->format("%a days %h:%I");
// shows: 37 days 23:30

PHP バージョン 5.6.2。ローカルホスト、サーバー、およびhttp://sandbox.onlinephpfunctions.com/でテストされ、同じ結果が得られました。

4

1 に答える 1

-2

この種の回避策を探しているかどうかわからない

   <?php
    $s= 84600;
    $ts=  strtotime('38 day 30 second', 0);
    $difference=$ts-$s;
    $days = floor($difference / 86400);
    $hours = floor(($difference - $days * 86400) / 3600);
    $minutes = floor(($difference - $days * 86400 - $hours * 3600) / 60);
    $seconds = floor($difference - $days * 86400 - $hours * 3600 - $minutes * 60);

    echo "{$days} days {$hours} hours {$minutes} minutes {$seconds} seconds";
?>

//Output 37 days 0 hours 30 minutes 30 seconds
于 2015-12-10T04:23:58.340 に答える