DateTimeImmutable::__construct

date_create_immutable

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

DateTimeImmutable::__construct -- date_create_immutable返回新的 DateTimeImmutable 对象

描述

面向对象风格

public DateTimeImmutable::__construct(string $datetime = "now", ?DateTimeZone $timezone = null)

过程化风格

返回新的 DateTimeImmutable 对象。

参数

datetime

日期/时间字符串。有效格式在 日期和时间格式 中解释。

在使用 $timezone 参数时,在此输入 "now" 以获取当前时间。

timezone

一个 DateTimeZone 对象,代表 $datetime 的时区。

如果省略 $timezone 或为 null,将使用当前时区。

注意:

$datetime 参数是 UNIX 时间戳(例如 @946684800)或指定了时区(例如 2010-01-28T15:00:00+02:002010-07-05T06:00:00Z)时,会忽略 $timezone 参数和当前时区。

返回值

返回一个新的 DateTimeImmutable 实例。

错误/异常

如果传入无效的日期/时间字符串,将抛出 DateMalformedStringException。在 PHP 8.3 之前,它是 Exception

变更日志

版本 描述
8.3.0 现在如果传入无效字符串,会抛出 DateMalformedStringException,而不是 Exception
7.1.0 从现在开始,微秒将填充实际值,而不是 '00000'。

示例

示例 #1 DateTimeImmutable::__construct() 示例

面向对象风格

<?php
try {
$date = new DateTimeImmutable('2000-01-01');
} catch (
Exception $e) {
echo
$e->getMessage();
exit(
1);
}

echo
$date->format('Y-m-d');
?>

过程化风格

<?php
$date
= date_create('2000-01-01');
if (!
$date) {
$e = date_get_last_errors();
foreach (
$e['errors'] as $error) {
echo
"$error\n";
}
exit(
1);
}

echo
date_format($date, 'Y-m-d');
?>

以上示例将输出

2000-01-01

示例 #2 DateTimeImmutable::__construct() 的复杂之处

<?php
// 指定的日期/时间,在您计算机的时区中。
$date = new DateTimeImmutable('2000-01-01');
echo
$date->format('Y-m-d H:i:sP') . "\n";

// 指定的日期/时间,在指定的时区中。
$date = new DateTimeImmutable('2000-01-01', new DateTimeZone('Pacific/Nauru'));
echo
$date->format('Y-m-d H:i:sP') . "\n";

// 当前日期/时间,在您计算机的时区中。
$date = new DateTimeImmutable();
echo
$date->format('Y-m-d H:i:sP') . "\n";

// 当前日期/时间,在指定的时区中。
$date = new DateTimeImmutable('now', new DateTimeZone('Pacific/Nauru'));
echo
$date->format('Y-m-d H:i:sP') . "\n";

// 使用 UNIX 时间戳。注意结果是 UTC 时区。
$date = new DateTimeImmutable('@946684800');
echo
$date->format('Y-m-d H:i:sP') . "\n";

// 不存在的数值会滚过。
$date = new DateTimeImmutable('2000-02-30');
echo
$date->format('Y-m-d H:i:sP') . "\n";
?>

以上示例将输出类似于

2000-01-01 00:00:00-05:00
2000-01-01 00:00:00+12:00
2010-04-24 10:24:16-04:00
2010-04-25 02:24:16+12:00
2000-01-01 00:00:00+00:00
2000-03-01 00:00:00-05:00

示例 #3 更改关联的时区

<?php
$timeZone
= new \DateTimeZone('Asia/Tokyo');

$time = new \DateTimeImmutable();
$time = $time->setTimezone($timeZone);

echo
$time->format('Y/m/d H:i:s'), "\n";
?>

以上示例将输出类似于

2022/08/12 23:49:23

示例 #4 使用相对日期/时间字符串

<?php
$time
= new \DateTimeImmutable("-1 year");

echo
$time->format('Y/m/d H:i:s'), "\n";
?>

以上示例将输出类似于

2021/08/12 15:43:51
添加注释

用户贡献笔记 1 条笔记

Dmitrii
1 年前
"如果 $timezone 被省略或为空,将使用当前时区。" - 请注意,时区不等于偏移量,如果这对您的应用程序很重要。

如果默认时区为 Europe/Moscow,则
echo (new \DateTimeImmutable('2014-10'))->format(DATE_ATOM); // 返回 "2014-10-01T00:00:00+04:00"
echo (new \DateTimeImmutable('2014-11'))->format(DATE_ATOM); // 返回 "2014-11-01T00:00:00+03:00"
这是由于法律变更(废除“夏令时”)。
To Top