PHP Conference Nagoya 2025

IntlCalendar::fromDateTime

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

IntlCalendar::fromDateTimeDateTime オブジェクトまたは文字列から、IntlCalendar を作成する

説明

オブジェクト指向型

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

手続き型

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

DateTime オブジェクト または、 DateTime オブジェクトを作成できる文字列から、 IntlCalendar を生成します。

新しいカレンダーオブジェクトは、 指定された DateTime と同じ瞬間 (とても遠い過去または未来の日付の場合、精度が失われることがあります) を表すだけでなく、 同じタイムゾーンも保持します。 (但し、異なるタイムゾーンのデータベースを使った場合、 結果が異なる場合があることにも注意して下さい)

パラメータ

datetime

DateTime オブジェクト または、 DateTime::__construct() に渡すことができる文字列。

戻り値

IntlCalendar オブジェクトを返します。失敗した場合は null を返します。 文字列を渡した場合、 DateTime のコンストラクタから伝播する形で、 例外がスローされる可能性があります。

例1 IntlCalendar::fromDateTime()

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

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

//Note the timezone is Europe/Berlin, not the default Europe/Lisbon
echo IntlDateFormatter::formatObject($cal1, 'yyyy MMMM d HH:mm:ss VVVV', 'de_DE'), "\n";

上の例の出力は以下となります。

2013 Februar 28 00:01:02 Deutschland Zeit

add a note

User Contributed Notes 1 note

up
1
SenseException
10 years ago
Don't forget that fromDateTime() doesn't set any locale and that the default one will be set. In my case it was en_US_POSIX.

If you wan't to create a IntlCalendar object containing the values of a DateTime object with your locale, use createInstance() instead and do a

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

IntlCalendar works with milliseconds so you need to multiply the timestamp with 1000.

Using fromDateTime() can cause unwanted behaviour like getFirstDayOfWeek() returning a wrong integer.
To Top