1

だから、私は PHP で DateTime 値と現在の日付の間の時間数を数えようとしています。1 時間ごとに個別にカウントしたいので、秒単位でそれを分単位、次に時間単位で分割することはしたくありません。たとえば、4PM-5PM は 1、5PM-6PM は 2 などです。

したがって、DateTime が 2012-09-24 7:49:23 で、現在の DateTime が 2012-09-24 8:00:19 の場合、数値 1 が出力されます。DateTime が 2012-09-24 7:49 の場合:23 で、現在の DateTime が 2012-09-24 8:59:45 であった場合でも、1 が出力されます (9:00:00 まで 2 に変更されません)。

私が比較に使用しているDateTimeはデータベースから出てきています.DateTimeの分/秒の部分を切り取るように(それらが0になるように)作成する方法を理解できれば. 現在の DateTime で同じことができれば、簡単です。問題は、私はそれを行う方法がわからないということです。では、2012-09-24 7:49:23 を 2012-09-24 7:00:00 に変換するにはどうすればよいでしょうか (DateTime フィールドで MySQL データベースに戻すことができるように、DateTime 形式にする必要があります)。 )

ありがとう!

編集:受け取った両方の回答に感謝しますが、それらをいじってみましたが、私が望むものを正確に得ることができませんでした. 代わりに、これを機能させるために必要なものを (さらに試行錯誤しながら) 自分で考え出すことができました。他の誰かが同様の問題を抱えている場合に備えて、以下に含めました。

$timea = date_format(date_create(date("c")), 'Y-m-d H:00:00');
$timeb = date_format(date_create($databasedate), 'Y-m-d H:00:00');

//hours
$diff = abs(strtotime($timeb) - strtotime($timea));
$hours = round(($diff/60/60));

そのコードはすべて非常に単純で理解しやすいはずです。みんなありがとう:)

4

2 に答える 2

0

PHP で日付と時刻の個々の部分をクリアする方法はたくさんありますが、クラスに固執したい場合DateTime(これを強くお勧めします)、これを複数の場所で使用する場合はDateTime、その機能をラップする独自の子クラス:

namespace my\name\space;

class MyWeirdMinuteAndSecondlessDateTime extends \DateTime {
    public function __construct($date, \DateTimeZone $tz = NULL) {
        parent::__construct($date, $tz);

        // Set the time to just the hour.  This is sort of
        // equivalent to the floor() function for floats.
        $this->setTime($this->format('G'), 0, 0);
    }
}
于 2012-09-25T02:48:44.883 に答える
0
$time1->setTime($time1->format('G'), 0, 0);
$time2->setTime($time2->format('G'), 0, 0);
$hourdiff = $time2->diff($time1)->format('G');
于 2012-09-25T02:59:39.850 に答える