日時のみ
$beginOfDay = DateTime::createFromFormat('Y-m-d H:i:s', (new DateTime())->setTimestamp($timestamp)->format('Y-m-d 00:00:00'))->getTimestamp();
$endOfDay = DateTime::createFromFormat('Y-m-d H:i:s', (new DateTime())->setTimestamp($timestamp)->format('Y-m-d 23:59:59'))->getTimestamp();
最初に DateTime オブジェクトが作成され、タイムスタンプが目的のタイムスタンプに設定されます。次に、オブジェクトは、時間/分/秒を 1 日の始まりまたは終わりに設定する文字列としてフォーマットされます。最後に、この文字列から新しい DateTime オブジェクトが作成され、タイムスタンプが取得されます。
読み取り可能
$dateTimeObject = new DateTime();
$dateTimeObject->setTimestamp($timestamp);
$beginOfDayString = $dateTimeObject->format('Y-m-d 00:00:00');
$beginOfDayObject = DateTime::createFromFormat('Y-m-d H:i:s', $beginOfDayString);
$beginOfDay = $beginOfDayObject->getTimestamp();
この長いバージョンを使用して、別の方法で 1 日の終わりを取得できます。
$endOfDayObject = clone $beginOfDayOject(); // Cloning because add() and sub() modify the object
$endOfDayObject->add(new DateInterval('P1D'))->sub(new DateInterval('PT1S'));
$endOfDay = $endOfDayOject->getTimestamp();
タイムゾーン
タイムゾーンは、次のような形式にタイムスタンプ インジケーターを追加しO
、DateTime オブジェクトの作成後にタイムスタンプを指定することによっても設定できます。
$beginOfDay = DateTime::createFromFormat('Y-m-d H:i:s O', (new DateTime())->setTimezone(new DateTimeZone('America/Los_Angeles'))->setTimestamp($timestamp)->format('Y-m-d 00:00:00 O'))->getTimestamp();
DateTime の柔軟性
指定された 2 番目の形式を変更することで、月の始まり/終わり、または時間の始まり/終わりなどの他の情報を取得することもできます。月の場合:'Y-m-01 00:00:00'
および'Y-m-t 23:59:59'
. 時間の場合:'Y-m-d H:00:00'
および'Y-m-d H:59:59'
add()/sub() および DateInterval オブジェクトと組み合わせてさまざまな形式を使用すると、任意の期間の開始または終了を取得できますが、うるう年を正しく処理するには注意が必要です。
関連リンク
PHPドキュメントから: