PHP Conference Japan 2024

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 int

表示纪元的日历字段,例如,在格里高利/儒略历中,公元为1,公元前为0;在日本日历中,平成时代为235。并非所有日历都具有多个纪元。

IntlCalendar::FIELD_YEAR int

年份的日历字段。这在不同纪元中并不唯一。如果日历类型具有多个纪元,则此字段的最小值通常为1

IntlCalendar::FIELD_MONTH int

月份的日历字段。月份序列从零开始,因此一月(此处用于表示日历的第一个月;这可能被称为其他名称,例如伊斯兰历中的穆哈兰)由0表示,二月由1表示,…,十二月由11表示,并且对于具有闰月的日历,第13个月由12表示。

IntlCalendar::FIELD_WEEK_OF_YEAR int

一年中第几周的日历字段。这取决于哪一天被视为一周的开始以及一周中最少的天数

IntlCalendar::FIELD_WEEK_OF_MONTH int

一个月中第几周的日历字段。这取决于哪一天被视为一周的开始以及一周中最少的天数

IntlCalendar::FIELD_DATE int

一个月中第几天。与IntlCalendar::FIELD_DAY_OF_MONTH相同,后者名称更清晰。

IntlCalendar::FIELD_DAY_OF_YEAR int

一年中第几天的日历字段。对于格里高利历,从1开始,到365366结束。

IntlCalendar::FIELD_DAY_OF_WEEK int

一周中第几天的日历字段。其值从1(星期日,请参见IntlCalendar::DOW_SUNDAY和后续常量)开始,最后一个有效值为7(星期六)。

IntlCalendar::FIELD_DAY_OF_WEEK_IN_MONTH int

给定一周中的某一天(星期日,星期一,…),此日历字段为特定月份中的这一天分配一个序数。因此,如果此字段的值为1,并且一周中第几天为2(星期一),则设置的日期为该月中的第一个星期一;最大值为5

此外,还允许0和负值。值0包含在某个月的前七天之前立即发生的七天(因此其“一个月中的第几天”值为1)。负值从月底开始计数——-1指向一个月中一周中某一天的最后一次出现,-2指向倒数第二次出现,依此类推。

IntlCalendar::FIELD_WEEK_OF_MONTHIntlCalendar::FIELD_WEEK_OF_YEAR不同,此值不依赖于IntlCalendar::getFirstDayOfWeek()IntlCalendar::getMinimalDaysInFirstWeek()。第一个星期一就是第一个星期一,即使它出现在属于上个月的一周中。

IntlCalendar::FIELD_AM_PM int

指示时间是在中午之前(值0,上午)还是之后(1)的日历字段。午夜为上午,中午为下午。

IntlCalendar::FIELD_HOUR int

小时的日历字段,不指定是上午还是下午。有效值为011

IntlCalendar::FIELD_HOUR_OF_DAY int

一天中完整(24小时)小时的日历字段。有效值为023

IntlCalendar::FIELD_MINUTE int

时间的分钟分量的日历字段。

IntlCalendar::FIELD_SECOND int

时间的秒分量的日历字段。

IntlCalendar::FIELD_MILLISECOND int

时间的毫秒分量的日历字段。

IntlCalendar::FIELD_ZONE_OFFSET int

指示时区原始偏移量(以毫秒为单位)的日历字段。原始偏移量是时区偏移量,不包括夏令时造成的任何偏移量。

IntlCalendar::FIELD_DST_OFFSET int

日历时区的夏令时偏移量(以毫秒为单位)的日历字段,如果对日历时间有效。

IntlCalendar::FIELD_YEAR_WOY int

表示一年中第几周目的年份的日历字段。

IntlCalendar::FIELD_DOW_LOCAL int

本地化一周中第几天的日历字段。这是一个介于17之间的值,1用于与IntlCalendar::getFirstDayOfWeek()返回值匹配的一周中的某一天。

IntlCalendar::FIELD_EXTENDED_YEAR int

日历字段,用于表示跨越纪元的连续年份数字。对于公历,此字段的值与IntlCalendar::FIELD_YEAR在公元年份中匹配;公元前y年由-y + 1表示。

IntlCalendar::FIELD_JULIAN_DAY int

日历字段,用于表示修正儒略日数。它与传统的儒略日数不同,因为它的转换发生在本地时区的午夜,而不是在 UTC 正午。它唯一地标识一个日期。

IntlCalendar::FIELD_MILLISECONDS_IN_DAY int

日历字段,包含IntlCalendar::FIELD_HOUR_OF_DAYIntlCalendar::FIELD_MINUTEIntlCalendar::FIELD_SECONDIntlCalendar::FIELD_MILLISECOND中的信息。范围从024 * 3600 * 1000 - 1。它不是当天经过的毫秒数,因为在夏令时转换时,它将具有类似于挂钟时间的间断。

IntlCalendar::FIELD_IS_LEAP_MONTH int

日历字段,其值为1表示闰月,否则为0

IntlCalendar::FIELD_FIELD_COUNT int

字段的总数。

IntlCalendar::FIELD_DAY_OF_MONTH int

IntlCalendar::FIELD_DATE的别名。

IntlCalendar::DOW_SUNDAY int

星期日。

IntlCalendar::DOW_MONDAY int

星期一。

IntlCalendar::DOW_TUESDAY int

星期二。

IntlCalendar::DOW_WEDNESDAY int

星期三。

IntlCalendar::DOW_THURSDAY int

星期四。

IntlCalendar::DOW_FRIDAY int

星期五。

IntlCalendar::DOW_SATURDAY int

星期六。

IntlCalendar::DOW_TYPE_WEEKDAY int

IntlCalendar::getDayOfWeekType()的输出,指示一周中的某一天是工作日。

IntlCalendar::DOW_TYPE_WEEKEND int

IntlCalendar::getDayOfWeekType()的输出,指示一周中的某一天属于周末。

IntlCalendar::DOW_TYPE_WEEKEND_OFFSET int

IntlCalendar::getDayOfWeekType()的输出,指示周末在给定的一周中的某一天开始。

IntlCalendar::DOW_TYPE_WEEKEND_CEASE int

IntlCalendar::getDayOfWeekType()的输出,指示周末在给定的一周中的某一天结束。

IntlCalendar::WALLTIME_FIRST int

IntlCalendar::getSkippedWallTimeOption()的输出,指示跳过的范围内的挂钟时间应参考比挂钟时间少一个小时且IntlCalendar::getRepeatedWallTimeOption()指示重复范围内的挂钟时间应参考此类挂钟时间第一次出现的时间的相同时刻。

IntlCalendar::WALLTIME_LAST int

IntlCalendar::getSkippedWallTimeOption()的输出,指示跳过的范围内的挂钟时间应参考比挂钟时间多一个小时的相同时刻,并且IntlCalendar::getRepeatedWallTimeOption()指示重复范围内的挂钟时间应参考此类挂钟时间第二次出现的时间的相同时刻。

IntlCalendar::WALLTIME_NEXT_VALID int

IntlCalendar::getSkippedWallTimeOption()的输出,指示跳过的范围内的挂钟时间应参考夏令时转换发生(开始)的时间。

更改日志

版本 描述
8.4.0 类常量现在已进行类型化。

内容目录

添加注释

用户贡献笔记 1 条笔记

Doug
1 年前
获取一周及其边界(用于构建日历视图)的示例

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

$thisWeek = IntlCalendar::fromDateTime($date, $locale);
$thisWeek->set(IntlCalendar::FIELD_DAY_OF_WEEK, $thisWeek->getFirstDayOfWeek());
// $thisWeek 现在指向一周的第一天
$weekStart = $thisWeek->toDateTime();

$daysToAdvance = $thisWeek->getMaximum(IntlCalendar::FIELD_DAY_OF_WEEK) - 1;
// 一周中的最大天数减 1 得到最后一天
$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