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

表示月份的日历字段。月份序号从零开始,因此一月(这里用来表示日历的第一个月,它可能被称为其他名称,例如伊斯兰历中的穆哈拉姆)用 0 表示,二月用 1 表示,……,十二月用 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 开始,到 365366 结束。

IntlCalendar::FIELD_DAY_OF_WEEK

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

IntlCalendar::FIELD_DAY_OF_WEEK_IN_MONTH

给定一个星期中的日期(星期日、星期一……),这个日历字段会为该星期中的日期在一个特定月份中分配一个序号。因此,如果该字段的值为 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

表示时间是上午(值 0,AM)还是下午(1)的日历字段。午夜是 AM,中午是 PM。

IntlCalendar::FIELD_HOUR

表示小时的日历字段,不区分上午还是下午。有效值为 011

IntlCalendar::FIELD_HOUR_OF_DAY

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

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

表示本地化星期几的日历字段。这是一个介于 17 之间的值,1 用于与 IntlCalendar::getFirstDayOfWeek() 返回的值匹配的星期几。

IntlCalendar::FIELD_EXTENDED_YEAR

表示跨时代的连续年份的日历字段。对于格里高利历,此字段的值与公元年份的 IntlCalendar::FIELD_YEAR 相匹配;公元前 y 年用 -y + 1 表示。

IntlCalendar::FIELD_JULIAN_DAY

表示修正的儒略日号的日历字段。它与传统的儒略日号不同,因为它的过渡发生在当地时区的午夜,而不是格林威治标准时间的正午。它可以唯一地标识一个日期。

IntlCalendar::FIELD_MILLISECONDS_IN_DAY

表示包含 IntlCalendar::FIELD_HOUR_OF_DAYIntlCalendar::FIELD_MINUTEIntlCalendar::FIELD_SECONDIntlCalendar::FIELD_MILLISECOND 中信息的信息的日历字段。范围是从 024 * 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() 的输出表示跳过的范围内的墙上时间应该指的是夏令时过渡发生(开始)的时间点。

目录

添加注释

用户贡献的注释 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