DateTimeImmutable クラス

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

はじめに

日付と時刻を表現します。

このクラスは DateTime と同じ振る舞いをします。 但し、DateTime::modify() のような、 状態を変更して新しいオブジェクトを返すメソッドが呼び出された時を除きます。

クラス概要

class DateTimeImmutable implements DateTimeInterface {
/* 継承した定数 */
public const string DateTimeInterface::ATOM = "Y-m-d\\TH:i:sP";
public const string DateTimeInterface::COOKIE = "l, d-M-Y H:i:s T";
public const string DateTimeInterface::ISO8601 = "Y-m-d\\TH:i:sO";
public const string DateTimeInterface::ISO8601_EXPANDED = "X-m-d\\TH:i:sP";
public const string DateTimeInterface::RFC822 = "D, d M y H:i:s O";
public const string DateTimeInterface::RFC850 = "l, d-M-y H:i:s T";
public const string DateTimeInterface::RFC1036 = "D, d M y H:i:s O";
public const string DateTimeInterface::RFC1123 = "D, d M Y H:i:s O";
public const string DateTimeInterface::RFC7231 = "D, d M Y H:i:s \\G\\M\\T";
public const string DateTimeInterface::RFC2822 = "D, d M Y H:i:s O";
public const string DateTimeInterface::RFC3339 = "Y-m-d\\TH:i:sP";
public const string DateTimeInterface::RFC3339_EXTENDED = "Y-m-d\\TH:i:s.vP";
public const string DateTimeInterface::RSS = "D, d M Y H:i:s O";
public const string DateTimeInterface::W3C = "Y-m-d\\TH:i:sP";
/* メソッド */
public __construct(string $datetime = "now", ?DateTimeZone $timezone = null)
public static createFromFormat(string $format, string $datetime, ?DateTimeZone $timezone = null): DateTimeImmutable|false
public static createFromMutable(DateTime $object): static
public static getLastErrors(): array|false
public static __set_state(array $array): DateTimeImmutable
public setDate(int $year, int $month, int $day): DateTimeImmutable
public setISODate(int $year, int $week, int $dayOfWeek = 1): DateTimeImmutable
public setTime(
    int $hour,
    int $minute,
    int $second = 0,
    int $microsecond = 0
): DateTimeImmutable
public setTimestamp(int $timestamp): DateTimeImmutable
public diff(DateTimeInterface $targetObject, bool $absolute = false): DateInterval
public format(string $format): string
public getOffset(): int
public getTimestamp(): int
public __wakeup(): void
}

変更履歴

バージョン 説明
7.1.0 DateTimeImmutable のコンストラクタで構築される値に、 現在時刻のマイクロ秒が含まれるようになりました。 これより前のバージョンでは、このマイクロ秒の情報は常に 0 で初期化されていました。

目次

add a note add a note

User Contributed Notes 3 notes

up
25
taoufik dot oussama at gmail dot com
7 years ago
Here's a simple example on how this class works :

    // Create a DateTimeImmutable Object
    $date = new DateTimeImmutable('2000-01-01');
    // "Change" that object and assign it's value to a new variable
    $date2 = $date->add(new DateInterval('P6M5DT24H'));
    // Check out the content of the two variables
    echo $date->format('Y-m-d') . "\n";
    // 2000-01-01
    echo $date2->format('Y-m-d') . "\n";
    // 2000-07-07
up
15
katsarov at gmail dot com
5 years ago
Note: If you are trying to get 02.29 for non leap year it will return 03.01
Example:
<?php
new DateTimeImmutable('2017-02-29') // 2017-03-01
?>
up
-25
soullinker0 googlemail
5 years ago
class MyDateTime extends DateTimeImmutable
{
    public function addDay(int $amount): MyDateTime
    {
        return $this->add(new DateInterval("P" . $amount . "D"));
    }
}

addDay will return DateTimeImmutable not MyDateTime. It looks like there is no "return static;"
i wish i would be
To Top