PHP 8.4.1 Released!

Класс IntlCalendar

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

Введение

Обзор класса

class IntlCalendar {
/* Константы */
public const int FIELD_ERA;
public const int FIELD_YEAR;
public const int FIELD_MONTH;
public const int FIELD_WEEK_OF_YEAR;
public const int FIELD_WEEK_OF_MONTH;
public const int FIELD_DATE;
public const int FIELD_DAY_OF_YEAR;
public const int FIELD_DAY_OF_WEEK;
public const int FIELD_AM_PM;
public const int FIELD_HOUR;
public const int FIELD_HOUR_OF_DAY;
public const int FIELD_MINUTE;
public const int FIELD_SECOND;
public const int FIELD_MILLISECOND;
public const int FIELD_ZONE_OFFSET;
public const int FIELD_DST_OFFSET;
public const int FIELD_YEAR_WOY;
public const int FIELD_DOW_LOCAL;
public const int FIELD_EXTENDED_YEAR;
public const int FIELD_JULIAN_DAY;
public const int FIELD_IS_LEAP_MONTH;
public const int FIELD_FIELD_COUNT;
public const int FIELD_DAY_OF_MONTH;
public const int DOW_SUNDAY;
public const int DOW_MONDAY;
public const int DOW_TUESDAY;
public const int DOW_WEDNESDAY;
public const int DOW_THURSDAY;
public const int DOW_FRIDAY;
public const int DOW_SATURDAY;
public const int DOW_TYPE_WEEKDAY;
public const int DOW_TYPE_WEEKEND;
public const int WALLTIME_FIRST;
public const int WALLTIME_LAST;
public const int WALLTIME_NEXT_VALID;
/* Методы */
private __construct()
public add(int $field, int $value): bool
public after(IntlCalendar $other): bool
public before(IntlCalendar $other): bool
public clear(?int $field = null): true
public equals(IntlCalendar $other): bool
public fieldDifference(float $timestamp, int $field): int|false
public static fromDateTime(DateTime|string $datetime, ?string $locale = null): ?IntlCalendar
public get(int $field): int|false
public getActualMaximum(int $field): int|false
public getActualMinimum(int $field): int|false
public static getAvailableLocales(): array
public getDayOfWeekType(int $dayOfWeek): int|false
public static getKeywordValuesForLocale(string $keyword, string $locale, bool $onlyCommon): IntlIterator|false
public getLeastMaximum(int $field): int|false
public getLocale(int $type): string|false
public getMaximum(int $field): int|false
public getMinimum(int $field): int|false
public static getNow(): float
public getTime(): float|false
public getType(): string
public getWeekendTransition(int $dayOfWeek): int|false
public isLenient(): bool
public isSet(int $field): bool
public isWeekend(?float $timestamp = null): bool
public roll(int $field, int|bool $value): bool
public set(int $field, int $value): true
public set(
    int $year,
    int $month,
    int $dayOfMonth = NULL,
    int $hour = NULL,
    int $minute = NULL,
    int $second = NULL
): true
public setDate(int $year, int $month, int $dayOfMonth): void
public setDateTime(
    int $year,
    int $month,
    int $dayOfMonth,
    int $hour,
    int $minute,
    ?int $second = null
): void
public setFirstDayOfWeek(int $dayOfWeek): true
public setLenient(bool $lenient): true
public setTime(float $timestamp): bool
}

Предопределённые константы

IntlCalendar::FIELD_ERA

Поле календаря численно представляет эпоху, например 1 для "от рождества Христова" и 0 для "до рождества Христова" в Григорианском и Юлианском календарях и 235 для периода Хэйсэй (平成) в Японском календаре. Не все календари имеют больше одной эпохи.

IntlCalendar::FIELD_YEAR

Поле календаря для года. Не уникально в контексте нескольких эпох. Если календарь содержит более одной эры, то, обычно, минимальное значение этого поля равно 1.

IntlCalendar::FIELD_MONTH

Поле календаря для месяца. Последовательность месяцев начинается с нуля, следовательно Janurary (Январь) (здесь используется для обозначения первого месяца года, но по факту может быть совсем другое имя, например Muharram для Исламского календаря) будет представлен числом 0, February (Февраль) числом 1, …, December (Декабрь) числом 11 и, для некоторых календарей, 13й или високосный месяц, значение будет равно 12.

IntlCalendar::FIELD_WEEK_OF_YEAR

Поле календаря для номера недели в году. Зависит от того, с какого дня начинается неделя и минимального количества дней в неделе.

IntlCalendar::FIELD_WEEK_OF_MONTH

Поле календаря для номера недели в месяце. Зависит от того, с какого дня начинается неделя и минимального количества дней в неделе.

IntlCalendar::FIELD_DATE

Поле календаря для номера дня в месяце. То же самое, что и IntlCalendar::FIELD_DAY_OF_MONTH.

IntlCalendar::FIELD_DAY_OF_YEAR

Поле календаря для номера дня в году. Для Грегорианского календаря начинается с 1 и заканчивается на 365 или 366.

IntlCalendar::FIELD_DAY_OF_WEEK

Поле календаря для номера дня в неделе. Начинается с 1 (воскресенье, смотрите описание константы IntlCalendar::DOW_SUNDAY и связанные константы) и заканчивается 7 (суббота).

IntlCalendar::FIELD_DAY_OF_WEEK_IN_MONTH

Номер дня недели (воскресенье, понедельник, …) в месяце. Допустим это значение равно 1, а значение дня недели равно 2 (понедельник), следовательно, это первый понедельник месяца. Максимальное значение равно 5.

Также допустимы значения 0 и ниже (отрицательные). Значение 0 охватывает 7 дней непосредственно перед началом месяца (первый подходящий день в месяце имеет значение 1). Отрицательные значения отсчитываются от конца месяца. Так, значение -1 указывает на последний подходящий день месяца, -2 на второй с конца и т. д.

В отличие от констант IntlCalendar::FIELD_WEEK_OF_MONTH и IntlCalendar::FIELD_WEEK_OF_YEAR, это значение не зависит от методов IntlCalendar::getFirstDayOfWeek() и IntlCalendar::getMinimalDaysInFirstWeek(). Первая среда — это первая среда, даже если неделя началась в предыдущем месяце.

IntlCalendar::FIELD_AM_PM

Поле календаря, которое определяет время до или после полудня. Соответственно 0 — до полудня, (1) — после. Полночь считается как «до полудня», полдень как «после полудня».

IntlCalendar::FIELD_HOUR

Поле календаря для часов, без указания до или после полудня. Допускаются значения в интервале от 0 до 11.

IntlCalendar::FIELD_HOUR_OF_DAY

Поле календаря для полных (24-часовой формат) часов. Допускаются значения от 0 до 23.

IntlCalendar::FIELD_MINUTE

Поле календаря для минут.

IntlCalendar::FIELD_SECOND

Поле календаря для секунд.

IntlCalendar::FIELD_MILLISECOND

Поле календаря для миллисекунд.

IntlCalendar::FIELD_ZONE_OFFSET

Поле календаря для «сырого» смещения часового пояса, в миллисекундах. «Сырое» смещение не учитывает переходы на летнее и зимнее время.

IntlCalendar::FIELD_DST_OFFSET

Поле календаря для смещения часового пояса в миллисекундах в зависимости от летнего или зимнего времени, если применимо к данному часовому поясу.

IntlCalendar::FIELD_YEAR_WOY

Поле календаря, которое представляет год для недели года.

IntlCalendar::FIELD_DOW_LOCAL

Поле календаря для локализованного дня недели. Принимает значения в диапазоне от 1 до 7. Значение 1 используется для дня недели, который соответствует значению, которое возвращает метод IntlCalendar::getFirstDayOfWeek().

IntlCalendar::FIELD_EXTENDED_YEAR

Поле календаря для представления номера года в контексте обеспечения непрерывности между эпохами. Например, для Грегорианского календаря это значение для эпохи «после рождества Христова» будет соответствовать константе IntlCalendar::FIELD_YEAR, а для эпохи «до рождества Христова» год y будет представлен как -y + 1.

IntlCalendar::FIELD_JULIAN_DAY

Поле календаря для модифицированных номеров дней Юлианского календаря. В отличие от стандартного Юлианского календаря, в нём переход происходит в полночь по локальному времени, а не в полдень по времени UTC. Он однозначно идентифицирует дату.

IntlCalendar::FIELD_MILLISECONDS_IN_DAY

Поле календаря, которое охватывает IntlCalendar::FIELD_HOUR_OF_DAY, IntlCalendar::FIELD_MINUTE, IntlCalendar::FIELD_SECOND и IntlCalendar::FIELD_MILLISECOND. Находится в диапазоне от 0 до 24 * 3600 * 1000 - 1. Это не количество миллисекунд, которое прошло с полуночи, поскольку в моменты перехода на летнее или зимнее время будет иметь разрывы.

IntlCalendar::FIELD_IS_LEAP_MONTH

Поле календаря, которое принимает значение 1 для високосного месяца и 0 для обычного.

IntlCalendar::FIELD_FIELD_COUNT

Общее количество полей.

IntlCalendar::FIELD_DAY_OF_MONTH

Псевдоним для IntlCalendar::FIELD_DATE.

IntlCalendar::DOW_SUNDAY

Воскресенье.

IntlCalendar::DOW_MONDAY

Понедельник.

IntlCalendar::DOW_TUESDAY

Вторник.

IntlCalendar::DOW_WEDNESDAY

Среда.

IntlCalendar::DOW_THURSDAY

Четверг.

IntlCalendar::DOW_FRIDAY

Пятница.

IntlCalendar::DOW_SATURDAY

Суббота.

IntlCalendar::DOW_TYPE_WEEKDAY

Вывод метода IntlCalendar::getDayOfWeekType() означает, что день — будний.

IntlCalendar::DOW_TYPE_WEEKEND

Вывод метода IntlCalendar::getDayOfWeekType() означает, что день — выходной.

IntlCalendar::DOW_TYPE_WEEKEND_OFFSET

Вывод IntlCalendar::getDayOfWeekType() означает, что выходные начинаются в этот день.

IntlCalendar::DOW_TYPE_WEEKEND_CEASE

Вывод метода IntlCalendar::getDayOfWeekType() означает, что выходные заканчиваются в этот день.

IntlCalendar::WALLTIME_FIRST

Вывод метода IntlCalendar::getSkippedWallTimeOption() означает, что время в пропущенном диапазоне должно ссылаться на момент времени меньший на один час, а вывод метода IntlCalendar::getRepeatedWallTimeOption() означает, что время в повторяемом диапазоне должно относиться к моменту первого появления такого времени.

IntlCalendar::WALLTIME_LAST

Вывод метода IntlCalendar::getSkippedWallTimeOption() означает, что время в пропущенном диапазоне должно ссылаться на момент времени больший на один час, а вывод метода IntlCalendar::getRepeatedWallTimeOption() означает, что время в повторяемом диапазоне должно относиться к моменту второго появления такого времени.

IntlCalendar::WALLTIME_NEXT_VALID

Вывод метода IntlCalendar::getSkippedWallTimeOption() означает, что время в пропущенном диапазоне относится к моменту, когда случился переход на зимнее или летнее время.

Содержание

  • IntlCalendar::add — Добавляет количество (со знаком) времени в поле
  • IntlCalendar::after — Определяет, время этого объекта позже времени переданного объекта
  • IntlCalendar::before — Определяет, время этого объекта раньше времени переданного объекта
  • IntlCalendar::clear — Очищает поле или все поля
  • IntlCalendar::__construct — Закрытый конструктор для запрета создания экземпляров
  • IntlCalendar::createInstance — Создаёт новый объект IntlCalendar
  • IntlCalendar::equals — Сравнивает время двух объектов IntlCalendar на предмет равенства
  • IntlCalendar::fieldDifference — Вычисляет разницу между заданным временем и временем объекта
  • IntlCalendar::fromDateTime — Создаёт IntlCalendar из объекта или строки DateTime
  • IntlCalendar::get — Получает значение поля
  • IntlCalendar::getActualMaximum — Максимальное значение для поля с учётом текущего времени объекта
  • IntlCalendar::getActualMinimum — Минимальное значение для поля с учётом текущего времени объекта
  • IntlCalendar::getAvailableLocales — Получает массив языковых стандартов, для которых есть данные
  • IntlCalendar::getDayOfWeekType — Сообщает, является ли день будним, выходным или днём с переходом между ними
  • IntlCalendar::getErrorCode — Получает последний код ошибки объекта
  • IntlCalendar::getErrorMessage — Получает последнее сообщение об ошибке для объекта
  • IntlCalendar::getFirstDayOfWeek — Получает первый день недели для языкового стандарта календаря
  • IntlCalendar::getGreatestMinimum — Получает наибольшее локальное минимальное значение поля
  • IntlCalendar::getKeywordValuesForLocale — Получает набор значений ключевых слов языкового стандарта
  • IntlCalendar::getLeastMaximum — Получает наименьший локальный максимум для поля
  • IntlCalendar::getLocale — Получает языковой стандарт, связанный с объектом
  • IntlCalendar::getMaximum — Получает глобальное максимальное значение поля
  • IntlCalendar::getMinimalDaysInFirstWeek — Получает минимальное количество дней, которое может быть в первой неделе в году или месяце
  • IntlCalendar::getMinimum — Получает глобальное минимальное значение поля
  • IntlCalendar::getNow — Получает число, представляющее текущее время
  • IntlCalendar::getRepeatedWallTimeOption — Получает поведение для обработки повторяющегося времени процессора
  • IntlCalendar::getSkippedWallTimeOption — Получает поведение для обработки пропущенного времени процессора
  • IntlCalendar::getTime — Получает время, представленное в данный момент объектом
  • IntlCalendar::getTimeZone — Получает часовой пояс объекта
  • IntlCalendar::getType — Получает тип календаря
  • IntlCalendar::getWeekendTransition — Получает время дня, когда выходные начинаются или заканчиваются
  • IntlCalendar::inDaylightTime — Определяет, переходит ли время объекта на летнее время
  • IntlCalendar::isEquivalentTo — Определяет, равен ли другой календарь, но для другого времени
  • IntlCalendar::isLenient — Определяет, является ли интерпретация даты/времени мягкой
  • IntlCalendar::isSet — Определяет, установлено ли поле
  • IntlCalendar::isWeekend — Определяет, приходятся ли определённые дата/время на выходные
  • IntlCalendar::roll — Добавляет значение в поле без переноса в более важные поля
  • IntlCalendar::set — Устанавливает поле времени или сразу несколько общих полей
  • IntlCalendar::setDate — Устанавливает поля даты
  • IntlCalendar::setDateTime — Устанавливает поля даты и времени
  • IntlCalendar::setFirstDayOfWeek — Устанавливает день, который является началом недели
  • IntlCalendar::setLenient — Устанавливает, должна ли интерпретация даты/времени быть мягкой
  • IntlCalendar::setMinimalDaysInFirstWeek — Устанавливает минимальное количество дней, которое может быть в первой неделе в году или месяце
  • IntlCalendar::setRepeatedWallTimeOption — Устанавливает поведение для обработки повторяющегося времени процессора при отрицательных переходах смещения часового пояса
  • IntlCalendar::setSkippedWallTimeOption — Устанавливает поведение для обработки пропущенного времени процессора при положительных переходах смещения часового пояса
  • IntlCalendar::setTime — Устанавливает календарное время в миллисекундах с начала эпохи Unix
  • IntlCalendar::setTimeZone — Устанавливает часовой пояс, используемый календарём
  • IntlCalendar::toDateTime — Преобразовывает объект IntlCalendar в объект DateTime
Добавить

Примечания пользователей 1 note

up
1
Doug
1 year ago
Example obtaining a week and its boundaries (for building a calendar view):

<?php
$date
= new DateTime('now');
$locale = 'en_US';

$thisWeek = IntlCalendar::fromDateTime($date, $locale);
$thisWeek->set(IntlCalendar::FIELD_DAY_OF_WEEK, $thisWeek->getFirstDayOfWeek());
// $thisWeek now points to the first day of the week
$weekStart = $thisWeek->toDateTime();

$daysToAdvance = $thisWeek->getMaximum(IntlCalendar::FIELD_DAY_OF_WEEK) - 1;
// Maximum number of days in a week minus 1 gets you to the last day
$weekEnd = $weekStart->modify("+{$daysToAdvance} days");

$previousWeek = IntlCalendar::fromDateTime($date, $locale);
$previousWeek->add(IntlCalendar::FIELD_WEEK_OF_YEAR, -1);
$previousWeek = $previousWeek->toDateTime();

$nextWeek = IntlCalendar::fromDateTime($date, $locale);
$nextWeek->add(IntlCalendar::FIELD_WEEK_OF_YEAR, 1);
$nextWeek = $nextWeek->toDateTime();
?>
To Top