PHP Velho Oeste 2024

DateTime::setTime

date_time_set

(PHP 5 >= 5.2.0, PHP 7, PHP 8)

DateTime::setTime -- date_time_set時刻を設定する

説明

オブジェクト指向型

public DateTime::setTime(
    int $hour,
    int $minute,
    int $second = 0,
    int $microsecond = 0
): DateTime

手続き型

date_time_set(
    DateTime $object,
    int $hour,
    int $minute,
    int $second = 0,
    int $microsecond = 0
): DateTime

DateTime オブジェクトの現在時刻を別の時刻にリセットします。

DateTimeImmutable::setTime() に似ていますが、 DateTime を使って動作します。

手続き型のバージョンは、 DateTime オブジェクトを最初の引数として取ります。

パラメータ

object

手続き型のみ: date_create() が返す DateTime オブジェクト。 この関数は、このオブジェクトを変更します。

hour

その時刻の時。

minute

その時刻の分。

second

その時刻の秒。

microsecond

その時刻のマイクロ秒。

戻り値

メソッドチェインに使う、変更された DateTime オブジェクトを返します。

変更履歴

バージョン 説明
8.1.0 (夏時間遷移のフォールバック期間中に) 二重に存在する hour に関する振る舞いが変更されました。 これより前のバージョンでは、 (夏時間遷移が起こる前の)最初の hour ではなく、 (夏時間遷移が起きた後の)二番目の hour を取得していました。
7.1.0 パラメータ microsecond が追加されました。

参考

add a note add a note

User Contributed Notes 2 notes

up
10
fabien dot villepinte at gmail dot com
6 years ago
A 4th parameter has been added in PHP-7.1 : microseconds

See the notes here:
https://github.com/php/php-src/blob/e33ec61f9c1baa73bfe1b03b8c48a824ab2a867e/UPGRADING#L285
up
1
php-notes at allenjb dot me dot uk
2 years ago
Be aware that setTime can cause a change in the timezone offset: https://3v4l.org/MqYN9

(The time 01:05:00 exists twice on this day in Europe/London due to DST change - once in +01:00 and then again at +00:00)

$tzUK = new \DateTimeZone("Europe/London");
$tzUtc = new \DateTimeZone("UTC");
$dt = \DateTimeImmutable::createFromFormat("!Y-m-d H:i:s", "2020-10-25 00:05:00", $tzUtc);
$dt = DateTime::createFromFormat('U', $dt->format('U'));

print $dt->format(\DateTime::RFC3339 ." e") ."\n";

$dt->setTimeZone($tzUK);

print $dt->format(\DateTime::RFC3339 ." e") ."\n";

$dt->setTime((int) $dt->format('H'), (int) $dt->format('i'), 0);

print $dt->format(\DateTime::RFC3339 ." e") ."\n";

Will output:
2020-10-25T00:05:00+00:00 +00:00
2020-10-25T01:05:00+01:00 Europe/London
2020-10-25T01:05:00+00:00 Europe/London

Verified on PHP 5.3 thru 8.0 (latest at time of posting)
To Top