DateTime::setTime

date_time_set

(PHP 5 >= 5.2.0)

DateTime::setTime -- date_time_setSets the time

說明

物件導向風格

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

程序化風格

DateTime date_time_set ( DateTime $object , int $hour , int $minute [, int $second = 0 ] )

Resets the current time of the DateTime object to a different time.

參數

object

僅為程序化風格:由 date_create() 回傳的 DateTime 類型的物件。此函式會修改這個物件。

hour

Hour of the time.

minute

Minute of the time.

second

Second of the time.

回傳值

回傳被修改的 DateTime 物件, 或者在失敗時回傳 FALSE.

更新日誌

版本 說明
5.3.0將回傳值從NULL改為 DateTime 類型。

範例

Example #1 DateTime::setTime() example

物件導向風格

<?php
$date 
= new DateTime('2001-01-01');

$date->setTime(1455);
echo 
$date->format('Y-m-d H:i:s') . "\n";

$date->setTime(145524);
echo 
$date->format('Y-m-d H:i:s') . "\n";
?>

程序化風格

<?php
$date 
date_create('2001-01-01');

date_time_set($date1455);
echo 
date_format($date'Y-m-d H:i:s') . "\n";

date_time_set($date145524);
echo 
date_format($date'Y-m-d H:i:s') . "\n";
?>

上例的輸出類似於:

2001-01-01 14:55:00
2001-01-01 14:55:24

Example #2 Values exceeding ranges are added to their parent values

<?php
$date 
= new DateTime('2001-01-01');

$date->setTime(145524);
echo 
$date->format('Y-m-d H:i:s') . "\n";

$date->setTime(145565);
echo 
$date->format('Y-m-d H:i:s') . "\n";

$date->setTime(146524);
echo 
$date->format('Y-m-d H:i:s') . "\n";

$date->setTime(255524);
echo 
$date->format('Y-m-d H:i:s') . "\n";
?>

上例將輸出:

2001-01-01 14:55:24
2001-01-01 14:56:05
2001-01-01 15:05:24
2001-01-02 01:55:24

參見

add a note add a note

User Contributed Notes 2 notes

up
10
fabien dot villepinte at gmail dot com
7 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