PHP Conference Japan 2024

IntlCalendar::fromDateTime

(PHP 5 >= 5.5.0, PHP 7, PHP 8, PECL >= 3.0.0a2)

IntlCalendar::fromDateTime从DateTime对象或字符串创建IntlCalendar

描述

面向对象风格

public static IntlCalendar::fromDateTime(DateTime|string $datetime, ?string $locale = null): ?IntlCalendar

过程化风格

intlcal_from_date_time(DateTime|string $datetime, ?string $locale = null): ?IntlCalendar

创建一个IntlCalendar对象,可以从DateTime对象或可以构建DateTime对象的字符串创建。

新日历不仅表示与给定DateTime相同的瞬间(对于过去或未来非常遥远的日期,精度会损失),而且表示相同的时区(需要注意的是,将使用不同的时区数据库,因此结果可能会有所不同)。

参数

datetime

一个DateTime对象或一个string,可以传递给DateTime::__construct()

返回值

创建的IntlCalendar对象,或在失败的情况下返回null。如果传递的是string,则会传播DateTime构造函数中发生的任何异常。

示例

示例 #1 IntlCalendar::fromDateTime()

<?php
ini_set
('date.timezone', 'Europe/Lisbon');

//与IntlCalendar::fromDateTime(new DateTime(...))相同
$cal1 = IntlCalendar::fromDateTime('2013-02-28 00:01:02 Europe/Berlin');

//注意时区是Europe/Berlin,而不是默认的Europe/Lisbon
echo IntlDateFormatter::formatObject($cal1, 'yyyy MMMM d HH:mm:ss VVVV', 'de_DE'), "\n";

以上示例将输出

2013 Februar 28 00:01:02 Deutschland Zeit

添加备注

用户贡献的笔记 1 条笔记

2
SenseException
10 年前
不要忘记 fromDateTime() 没有设置任何区域设置,将使用默认区域设置。在我的例子中是 en_US_POSIX。

如果您想创建一个包含 DateTime 对象值以及您所在区域设置的 IntlCalendar 对象,请改用 createInstance() 并执行以下操作:

<?php
$intlCalendar
->setTime($dateTime->getTimestamp() * 1000);
?>

IntlCalendar 使用毫秒,因此您需要将时间戳乘以 1000。

使用 fromDateTime() 可能会导致意外行为,例如 getFirstDayOfWeek() 返回错误的整数。
To Top