phpday 2022

IntlCalendar::fromDateTime

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

IntlCalendar::fromDateTimeСоздаёт IntlCalendar из объекта или строки DateTime

Описание

Объектно-ориентированный стиль

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

add a note add a note

User Contributed Notes 1 note

up
1
SenseException
7 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