cmixin / business-day
处理工作日的Carbon mixin
Requires
- php: >=7.1
- nesbot/carbon: ^2.29 || ^3.0.1
Requires (Dev)
- phpunit/phpunit: ^7.5.20 || ^8.5.31
- dev-master / 1.x-dev
- 1.18.4
- 1.18.3
- 1.18.2
- 1.18.1
- 1.18.0
- 1.17.2
- 1.17.1
- 1.17.0
- 1.16.5
- 1.16.4
- 1.16.3
- 1.16.2
- 1.16.1
- 1.16.0
- 1.15.3
- 1.15.2
- 1.15.1
- 1.15.0
- 1.14.0
- 1.13.3
- 1.13.2
- 1.13.1
- 1.13.0
- 1.12.7
- 1.12.6
- 1.12.5
- 1.12.4
- 1.12.3
- 1.12.2
- 1.12.1
- 1.12.0
- 1.11.0
- 1.10.0
- 1.9.0
- 1.8.0
- 1.7.6
- 1.7.5
- 1.7.4
- 1.7.3
- 1.7.2
- 1.7.1
- 1.7.0
- 1.6.2
- 1.6.1
- 1.6.0
- 1.5.1
- 1.5.0
- 1.4.1
- 1.4.0
- 1.3.2
- 1.3.1
- 1.3.0
- 1.2.0
- 1.1.1
- 1.1.0
- 1.0.2
- 1.0.1
- 1.0.0
- 0.1.3
- 0.1.2
- 0.1.1
- 0.1.0
- dev-feature/use-new-polyfill
- dev-fix/issue-84-support-alt-calendar-with-conditions
This package is auto-updated.
Last update: 2024-08-26 17:03:41 UTC
README
处理工作日的Carbon mixin
安装
composer require cmixin/business-day
用法
首先在应用程序的全局引导位置加载mixin
<?php use Cmixin\BusinessDay; // You can select one of our official list $baseList = 'us-national'; // or region such as 'us-il' // You can add/remove days (optional): $additionalHolidays = [ 'independence-day' => null, // Even if it's holiday, you can force it to null to make your business open 'boss-birthday' => '09-26', // Close the office on September 26th // you can also use slash if you prefer day first '26/09' (September 26th too) 'julian-christmas' => '= julian 12-25', // We support many calendars such as the Julian calendar // We support expressions 'special-easter' => '= Tuesday before easter', 'last-monday' => '= last Monday of October', 'conditional' => '= 02-25 if Tuesday then next Friday', // We support conditions // And we support closures: 'very-special' => function ($year) { if ($year === 2020) { return '01-15'; } return '02-15'; }, ]; // You can optionally specify some days that are worked even if on weekend $extraWorkDays = [ 'moving-office' => '2021-01-17', // year specific 'yearly-meeting' => '01-25', // or any year rather it's weekend or not ]; BusinessDay::enable('Carbon\Carbon', $baseList, $additionalHolidays, $extraWorkDays); // Or if you use Laravel: // BusinessDay::enable('Illuminate\Support\Carbon', $baseList, $additionalHolidays); // And you can even enable multiple classes at once: BusinessDay::enable([ 'Carbon\Carbon', 'Carbon\CarbonImmutable', ], $baseList, $additionalHolidays);
之后在任何地方使用的任何Carbon实例上现在都有可用的工作日方法。
您还可以先在Carbon上启用方法,然后稍后设置地区/假日
<?php use Cmixin\BusinessDay; BusinessDay::enable('Carbon\Carbon'); // Or if you use Laravel: // BusinessDay::enable('Illuminate\Support\Carbon');
配置假日
您可以为不同地区设置不同的假日列表(以处理不同的国家、企业等)
我们提供了143个国家356个地区假日列表,在src/Cmixin/Holidays中即可使用。
并且您可以轻松地自定义它们并添加自己的列表。
假日列表文件是一个PHP文件,返回一个数组,数组中的每个项代表一年的假日。
它可以是固定日期,如'12-25'
代表圣诞节,或者以=
开始的表示,如'first Monday of January'
,或者是一个闭包,用于计算给定年份的日期。
表达式支持PHP DateTime
构造函数支持的任何格式,如下所示:
七月第二个星期三
03-01 - 3天
我们还添加了很多语法糖
= easter 3
(复活节 + 3天)= Friday before 01-01
(之前/之后)= 01-01 if Saturday then next Monday and if Sunday, Monday then next Tuesday
(多个条件)= 01-01 if weekend then next Monday
(周末 = 周六或周日)= 01-01 substitute
(替代 = 将日期调整到下一个不是周六、周日或假日的日期,这意味着如果您同时有01-01 substitute
和01-02 substitute
,无论日期如何,您都可以确保以正确的顺序得到2个不在周末的假日)= orthodox -2
(复活节前2天)= julian 12-25
(儒略历)= 02-05 on Monday
只有如果这是星期一。= 02-05 not on Monday
如果这是星期一,则不是假日。= 02-05 on even years
只在偶数年。= 02-05 on every 5 years since 1999
如果年份是1999、2004、2009、2014等。
setHolidaysRegion / getHolidaysRegion
要选择地区的假日集合,请使用
Carbon::parse('2000-12-25 00:00:00')->isHoliday(); // false Carbon::setHolidaysRegion('us'); Carbon::parse('2000-12-25 00:00:00')->isHoliday(); // true Carbon::getHolidaysRegion(); // 'us-national' (national is the default region of a country code)
这将选择我们为美国提供的国家预设(只有所有州都共有的假日)。
在选择地区之前,假日列表为空,因此对于任何日期,isHoliday
都将返回false
。
getYearHolidays
获取指定年份的假日日期列表
Carbon::setHolidaysRegion('us'); foreach (Carbon::getYearHolidays(2020) as $id => $holiday) { echo $holiday->getHolidayName().': '.$holiday->format('l, F j, Y')."\n"; } // If Carbon::getYearHolidays() is called without argument, current year is used instead.
它将输出
New Year: Wednesday, January 1, 2020
Martin Luther King Jr. Day: Monday, January 20, 2020
Washington’s Birthday: Monday, February 17, 2020
Memorial Day: Monday, May 25, 2020
Independence Day: Monday, July 6, 2020
Labor Day: Monday, September 7, 2020
Columbus Day: Monday, October 12, 2020
Day of the veterans: Wednesday, November 11, 2020
Thanksgiving: Thursday, November 26, 2020
Christmas: Friday, December 25, 2020
getHolidays
此方法允许您获取传递给参数的给定地区的假日列表,如果没有传递参数,则返回当前选定地区的列表。
Carbon::getHolidays('us'); // raw us-national holidays list Carbon::setHolidaysRegion('fr'); Carbon::getHolidays(); // raw fr-national holidays list
setHolidays
这就是您可以设置自己的假日列表的方式
Carbon::setHolidays('us-il', array_merge( Carbon::getHolidays('us-national'), [ // Presidents' Day 'presidents-day' => '= third monday of february', // can be a datetime expression // Columbus Day 'columbus-day' => function ($year) { // can be a closure $date = new DateTime("second monday of october $year"); return $date->format('d/m'); }, // Day after Thanksgiving 'thanksgiving-next-day' => '= fourth thursday of november $year +1 day', // '$year' will be replaced by current year ] )); Carbon::setHolidays('my-enterprise', array_merge( Carbon::getHolidays('us-is'), [ // Lincoln's Birthday 'lincolns-birthday' => '= 02-12 substitute', // substitute will shift the holiday until it does not fall on Saturday, Sunday or an other holiday 'company-closed-day' => '= 04-05 if friday then previous wednesday', // custom rules can be applied with if/then (if can be followed by a day name or "weekend") ] )); // Then when you select my-enterprise, all us-national, // us-il and my-enterprise days are enabled Carbon::setHolidaysRegion('my-enterprise');
您还可以在setHolidays
中传递深层数组来同时设置假日日期和观察标志、名称(在不同语言中)或两者都设置
Carbon::setHolidays('my-enterprise', [ 'lincolns-birthday' => [ 'date' => '12/02', 'observed' => true, 'name' => [ 'en' => "Lincoln's Birthday", 'fr' => 'Anniversaire du Président Lincoln', ], ], ]);
addHolidays
虽然setHolidays将替换给定地区的整个假日列表,但addHolidays将假日追加到当前列表中。
Carbon::addHolidays('my-list', [ 'poney' => '20/01', 'swimmingpool' => '21/01', ]); Carbon::addHolidays('my-list', [ 'boss-birthday' => '10/02', 'boss-birthday-next-day' => '11/02', ]); Carbon::getHolidays('my-list') // contains 20/01, 21/01, 10/02 and 11/02
关于 setHolidays
和 addHolidays
,它们使用日期、观测和名称键处理深层数组。
resetHolidays
重置之前设置的 所有假日和地区。
isHoliday
如果日期(Carbon 实例)是假日(所选地区的列表中),则返回 true
,否则返回 false
。
Carbon::setHolidaysRegion('us-national'); Carbon::parse('2018-01-15')->isHoliday() // true for 2018 Carbon::parse('2018-01-21')->isHoliday() // false for 2018 Carbon::parse('2019-01-15')->isHoliday() // false for 2019 Carbon::parse('2019-01-21')->isHoliday() // true for 2019 Carbon::isHoliday() // true if today is a holiday
getHolidayId
与 isHoliday
相同,但返回给定假日的字符串 ID,因此您可以针对特定的假日。
Carbon::setHolidaysRegion('us-national'); Carbon::parse('2018-12-25')->getHolidayId() // "christmas" Carbon::parse('2018-01-15')->getHolidayId() // "mlk-day" // Returns false if the day is not a holiday Carbon::parse('2018-01-21')->getHolidayId() // false $nextWeekHoliday = Carbon::today()->addWeek()->getHolidayId(); if ($nextWeekHoliday === 'easter' or $nextWeekHoliday === 'christmas') { echo 'Time to get chocolates.'; }
getHolidayName
返回当前区域(默认为英语)的假日名称,或如果该天不是假日,则返回 false。
Carbon::setHolidaysRegion('fr-national'); Carbon::parse('2018-12-25')->getHolidayName() // "Christmas" Carbon::parse('2018-12-25')->getHolidayName('fr') // "Noël" Carbon::setLocale('nl'); Carbon::parse('2018-01-15')->getHolidayName() // "Eerste Kerstdag" // If the name is not translated in business-day Carbon::setLocale('de'); Carbon::parse('2018-01-15')->getHolidayName() // "Christmas" // With Carbon 2, you can use local locale: Carbon::parse('2018-01-15')->locale('sl')->getHolidayName() // "Božič"
注意:请注意,地区对假日语言名称没有影响,因为一些地区有多种语言。因此,要获取法国假日的法语名称,您需要同时设置 Carbon::setHolidaysRegion('fr-national')
和 Carbon::setLocale('fr_FR')
,前者用于假日日历,后者用于语言。
setHolidayName
想要更改特定语言的假日名称?没问题
Carbon::parse('2018-12-25')->getHolidayName() // "Christmas" Carbon::setHolidayName('christmas', 'en', 'Christmas Day'); Carbon::parse('2018-12-25')->getHolidayName() // "Christmas Day"
它还允许您为手动添加的附加假日命名,并且您可以使用数组指定多种语言
BusinessDay::enable('Carbon\Carbon', 'us-national', [ 'company-creation' => '05-15', ]); Carbon::setHolidayName('company-creation', [ 'en' => 'The Day The Company Was Created', 'fr' => "Le jour de la création de l'Entreprise", ]);
isBusinessDay
如果日期(Carbon 实例)既不是周末也不是假日,则返回 true
,否则返回 false
。周末可以配置(请参阅 Carbon 文档周末部分)。
Carbon::setHolidaysRegion('us-national'); Carbon::parse('2018-01-15')->isBusinessDay() // false for 2018 (Martin Luther King Jr. Day, sleep) Carbon::parse('2018-01-21')->isBusinessDay() // false for 2018 (sunday is week-end by default, sleep) Carbon::parse('2019-01-15')->isBusinessDay() // true for 2019 (tuesday, nothing special, go to work) Carbon::parse('2019-01-21')->isBusinessDay() // false for 2019 (Martin Luther King Jr. Day, sleep) Carbon::isBusinessDay() // true if today is a business day
nextBusinessDay
向日期(Carbon 实例)添加天数,以跳转到下一个工作日(跳过假日和周末)。
Carbon::setHolidaysRegion('us-national'); echo Carbon::parse('2018-01-12')->nextBusinessDay()->format('Y-m-d'); // 2018-01-16 echo Carbon::parse('2018-01-13')->nextBusinessDay()->format('Y-m-d'); // 2018-01-16 echo Carbon::parse('2018-01-15')->nextBusinessDay()->format('Y-m-d'); // 2018-01-16 echo Carbon::parse('2018-01-16')->nextBusinessDay()->format('Y-m-d'); // 2018-01-17 echo Carbon::parse('2018-01-12 12:30:00')->nextBusinessDay()->format('Y-m-d H:i'); // 2018-01-16 12:30 (time is kept) // If you don't want to keep the time, just use ->startOfDay() echo Carbon::nextBusinessDay()->format('Y-m-d'); // returns the next business day date after today (midnight)
previousBusinessDay
从日期(Carbon 实例)减去天数,以跳转到上一个工作日(跳过假日和周末)。
Carbon::setHolidaysRegion('us-national'); echo Carbon::parse('2018-01-12')->previousBusinessDay()->format('Y-m-d'); // 2018-01-11 echo Carbon::parse('2018-01-13')->previousBusinessDay()->format('Y-m-d'); // 2018-01-12 echo Carbon::parse('2018-01-15')->previousBusinessDay()->format('Y-m-d'); // 2018-01-12 echo Carbon::parse('2018-01-16')->previousBusinessDay()->format('Y-m-d'); // 2018-01-12 echo Carbon::parse('2018-01-15 12:30:00')->previousBusinessDay()->format('Y-m-d H:i'); // 2018-01-12 12:30 (time is kept) // If you don't want to keep the time, just use ->startOfDay() echo Carbon::previousBusinessDay()->format('Y-m-d'); // returns the previous business day date before today (midnight)
currentOrNextBusinessDay
如果当前日期是工作日,则返回当前日期(Carbon 实例),否则添加天数以跳转到下一个工作日(跳过假日和周末)。
Carbon::setHolidaysRegion('us-national'); echo Carbon::parse('2018-01-12')->currentOrNextBusinessDay()->format('Y-m-d'); // 2018-01-12 echo Carbon::parse('2018-01-13')->currentOrNextBusinessDay()->format('Y-m-d'); // 2018-01-16 echo Carbon::parse('2018-01-15')->currentOrNextBusinessDay()->format('Y-m-d'); // 2018-01-16 echo Carbon::parse('2018-01-16')->currentOrNextBusinessDay()->format('Y-m-d'); // 2018-01-16 echo Carbon::parse('2018-01-13 12:30:00')->currentOrNextBusinessDay()->format('Y-m-d H:i'); // 2018-01-16 12:30 (time is kept) // If you don't want to keep the time, just use ->startOfDay() echo Carbon::currentOrNextBusinessDay() // equivalent to Carbon::today()->currentOrNextBusinessDay()
currentOrPreviousBusinessDay
如果当前日期是工作日,则返回当前日期(Carbon 实例),否则减去天数以跳转到上一个工作日(跳过假日和周末)。
Carbon::setHolidaysRegion('us-national'); echo Carbon::parse('2018-01-12')->currentOrPreviousBusinessDay()->format('Y-m-d'); // 2018-01-12 echo Carbon::parse('2018-01-13')->currentOrPreviousBusinessDay()->format('Y-m-d'); // 2018-01-12 echo Carbon::parse('2018-01-15')->currentOrPreviousBusinessDay()->format('Y-m-d'); // 2018-01-12 echo Carbon::parse('2018-01-16')->currentOrPreviousBusinessDay()->format('Y-m-d'); // 2018-01-16 echo Carbon::parse('2018-01-13 12:30:00')->currentOrPreviousBusinessDay()->format('Y-m-d H:i'); // 2018-01-16 12:30 (time is kept) // If you don't want to keep the time, just use ->startOfDay() echo Carbon::currentOrPreviousBusinessDay() // equivalent to Carbon::today()->currentOrPreviousBusinessDay()
addBusinessDays
向日期(Carbon 实例)添加天数,跳过假日和周末。
Carbon::setHolidaysRegion('us-national'); echo Carbon::parse('2018-01-10')->addBusinessDays(4)->format('Y-m-d'); // 2018-01-17 echo Carbon::parse('2018-01-13')->addBusinessDays()->format('Y-m-d'); // 2018-01-16 add 1 business day by default echo Carbon::addBusinessDays(6)->format('Y-m-d'); // returns the date 6 business days after today (midnight)
addBusinessDay
addBusinessDays 的别名。
subBusinessDays 或 subtractBusinessDays
从日期(Carbon 实例)减去天数,跳过假日和周末。
Carbon::setHolidaysRegion('us-national'); echo Carbon::parse('2018-01-17')->subBusinessDays(4)->format('Y-m-d'); // 2018-01-12 echo Carbon::parse('2018-01-15')->subBusinessDays()->format('Y-m-d'); // 2018-01-12 sub 1 business day by default echo Carbon::subBusinessDays(5)->format('Y-m-d'); // returns the date 5 business days date before today (midnight)
subBusinessDay 或 subtractBusinessDay
subBusinessDays 的别名。
setObservedHolidaysZone
您可以定义孤立区域,可以观察不同的假日列表。默认区域是 "default"
。
Carbon::setHolidaysRegion('us-national'); Carbon::setObservedHolidaysZone('Nevada-subsidiary-company'); Carbon::observeAllHolidays(); Carbon::unobserveHoliday('independence-day'); Carbon::setObservedHolidaysZone('Illinois-subsidiary-company'); Carbon::observeAllHolidays(); Carbon::unobserveHolidays(['labor-day', 'mlk-day']); Carbon::setObservedHolidaysZone('Nevada-subsidiary-company'); Carbon::parse('2018-01-15')->isObservedHoliday(); // true Carbon::parse('2018-07-04')->isObservedHoliday(); // false Carbon::parse('2018-09-03')->isObservedHoliday(); // true Carbon::setObservedHolidaysZone('Illinois-subsidiary-company'); Carbon::parse('2018-01-15')->isObservedHoliday(); // false Carbon::parse('2018-07-04')->isObservedHoliday(); // true Carbon::parse('2018-09-03')->isObservedHoliday(); // false
getObservedHolidaysZone
获取当前用于观测假日的区域。
Carbon::getObservedHolidaysZone(); // "Illinois-subsidiary-company"
isObservedHoliday
如果当前天是观测假日(使用当前列表中的假日列表,并且根据当前区域进行观测),则返回 true。
Carbon::setHolidaysRegion('fr-national'); Carbon::parse('2018-01-15')->isHoliday(); // true // By default no holiday is observed Carbon::parse('2018-01-15')->isObservedHoliday(); // false // Then you can observe a list of holidays Carbon::unobserveHolidays(['christmas', 'new-year']); Carbon::parse('2018-01-15')->isObservedHoliday(); // true // Observed holidays are kept if you change the holidays region: Carbon::setHolidaysRegion('us-national'); Carbon::parse('2018-01-15')->isObservedHoliday(); // true // So you can observe holidays that are not in the current region with no restriction // You can check observance by ID: Carbon::isObservedHoliday('christmas'); // false Carbon::isObservedHoliday('labor-day'); // true Carbon::isObservedHoliday(); // check if today is an observed holiday
observeHoliday
观测假日。您可以使用 setObservedHolidaysZone
使用多个观测日。
Carbon::observeHoliday(['christmas', 'new-year']); Carbon::observeHoliday('easter');
observeHolidays
observeHoliday 的别名。
Carbon::observeHolidays(['christmas', 'new-year']); Carbon::observeHolidays('easter');
unobserveHoliday
将假日设置为非观测假日。您可以使用 setObservedHolidaysZone
使用多个观测日。
Carbon::unobserveHoliday(['christmas', 'new-year']); Carbon::unobserveHoliday('easter');
unobserveHolidays
unobserveHoliday 的别名。
Carbon::unobserveHolidays(['christmas', 'new-year']); Carbon::unobserveHolidays('easter');
observeAllHolidays
移除当前区域中观测日的任何先前设置,然后将所有假日默认设置为观测。
// Observe every holidays except Easter Carbon::observeAllHolidays(); Carbon::unobserveHoliday('easter');
unobserveAllHolidays
移除当前区域中观测日的任何先前设置,然后将所有假日默认设置为非观测。
// Observe only Easter Carbon::unobserveAllHolidays(); Carbon::observeHoliday('easter');
diffInBusinessDays
获取两个日期之间开放的天数。
$openDays = Carbon::diffInBusinessDays('December 25'); // If only one date, [now] is used as the second date echo "You have to work $openDays days until Christmas.\n"; $days = Carbon::parse('2019-06-10')->diffInBusinessDays(Carbon::parse('2019-06-18')->endOfDay()); echo "If you ask to leave from 2019-06-10 to 2019-06-18, it will cost to you $days days of paid vacation.\n"; // Note the ->endOfDay() to include the last day of the range
⚠️ 碳 2 和 3 的行为不同
- Carbon <= 2 返回绝对数值(始终为正数)。
- Carbon >= 3 返回一个负数,如果过去日期在当前日期之前,则返回正数。
getBusinessDaysInMonth
获取当前/给定月份中的开放天数。
echo Carbon::getBusinessDaysInMonth(); // Open days count in the current month echo Carbon::getBusinessDaysInMonth('2019-06'); // Open days count in June 2019 echo Carbon::parse('2019-06-10')->getBusinessDaysInMonth(); // Can be called from an instance
getMonthBusinessDays
获取当前/给定月份中每个开放天期的 Carbon 对象数组。
print_r(Carbon::getMonthBusinessDays()); // All open days in the current month print_r(Carbon::getMonthBusinessDays('2019-06')); // Open days in June 2019 print_r(Carbon::parse('2019-06-10')->getMonthBusinessDays()); // Can be called from an instance
isExtraWorkday
额外工作日是指即使在周末工作的情况(因此对于这些日子isBusinessDay()
返回true
)。它们允许处理一些国家使用的补偿日和某些业务异常。
isExtraWorkday
返回true
表示当前日期是额外工作日,否则返回false
。
Carbon::setHolidaysRegion('cn-national'); Carbon::parse('2021-02-07')->isExtraWorkday(); // true
isExtraWorkday
与isHoliday
等效,但用于额外工作日列表(without
配置条目)。
getExtraWorkdayId
获取当前额外工作日的ID,如果不是额外工作日则返回false
。
getExtraWorkdayId
与getHolidayId
等效,但用于额外工作日列表。
getExtraWorkdays
获取给定地区(未指定时为当前地区)的额外工作日列表。
getExtraWorkdays
与getHolidays
等效,但用于额外工作日列表。
setExtraWorkdays
设置给定地区的额外工作日列表。
setExtraWorkdays
与setHolidays
等效,但用于额外工作日列表。
addExtraWorkday
将额外工作日添加到给定地区的列表中。
addExtraWorkday
与addHoliday
等效,但用于额外工作日列表。
setBusinessDayChecker
自定义确定日期是否为工作日的方法。
// Global way Carbon::setBusinessDayChecker(function (CarbonInterface $date) { // As an example, you can customize it so // every first Wednesday of month is always worked even if it's an holiday: if ($date->isWednesday() && $date->copy()->subWeek()->month !== $date->month) { return true; } return $date->isExtraWorkday() || ($date->isWeekday() && !$date->isHoliday()); }); // Single object config (prior to global) $date = Carbon::parse('2020-12-03'); $date->setBusinessDayChecker($someFunction);
如果没有设置或设置为null
,则默认计算为
$date->isExtraWorkday() or ($date->isWeekday() and !$date->isHoliday())
setHolidayGetter
自定义确定日期是否为假日以及它是哪一天的方法。
// Global way Carbon::setHolidayGetter(function (string $region, CarbonInterface $self, callable $fallback) { [$country, $state] = explode('-', $region); $date = $self->format('Y-m-d'); // Assuming the API you use does not support dates after 2040, you can fallback to the default internal data if ($self->year > 2040) { return $fallback(); } $holidayData = file_get_contents("https://someholidaysapi.com/holidays/?country=$country&state=$state&date=$date"); return $holidayData ? $holidayData['name'] // The function should return a unique string (like a name or an ID) : false; // or false if the day is not a holiday }); // Single object config (prior to global) $date = Carbon::parse('2020-12-03'); $date->setHolidayGetter($someFunction);
setExtraWorkdayGetter
自定义确定日期是否为额外工作日以及它是哪一天的方法。
它与setHolidayGetter
等效,但用于额外工作日。
setHolidayDataById
设置给定假日ID的数据数组。
Carbon::setHolidayDataById('christmas', [ 'info' => 'It may be cold in USA', ]);
setHolidayData
设置当前假日的数据数组(如果当前日不是假日则不执行任何操作)。
Carbon::parse('2020-12-25')->setHolidayData([ 'info' => 'It may be cold in USA', ]);
getHolidayDataById
获取给定假日ID存储的数据数组。
Carbon::getHolidayDataById('christmas')
getHolidayData
获取当前假日存储的数据数组(如果当前日不是假日则返回null
)。
Carbon::parse('2020-12-25')->getHolidayData()
getHolidaysAvailableRegions
获取可选择的可用地区数组。
Carbon::getHolidaysAvailableRegions()
Laravel
要在Laravel中全局启用工作日,请在配置文件config/carbon.php
中设置默认假日设置(如果尚不存在,则创建此文件)
<?php return [ 'holidays' => [ 'region' => 'us', 'with' => [ 'boss-birthday' => '09-26', 'last-monday' => '= last Monday of October', ], // extra work days (even if in the weekend) 'without' => [ 'exceptional-work-day' => '2021-01-03', ], ], ];
如果您使用Laravel但不想使用此全局配置来启用工作日,您可以使用以下方法从自动发现中删除它
"extra": { "laravel": { "dont-discover": [ "cmixin/business-day" ] } },
时区说明
当您设置假日地区时,它不会更改时区,因此如果1月1日是假日,从Carbon::parse('2010-01-01 00:00:00.000000)
到Carbon::parse('2010-01-01 23:59:59.999999)
的->isHoliday()
都会返回true
,无论您为这些Carbon
实例设置的时区如何。
如果您想了解世界其他地方是否是假日或工作日,您必须进行转换
Carbon::parse('2010-01-01 02:30', 'Europe/Paris')->setTimezone('America/Toronto')->isHoliday() // false Carbon::parse('2010-01-01 12:30', 'Europe/Paris')->setTimezone('America/Toronto')->isHoliday() // true
贡献
该库的范围是向Carbon提供业务日期和时间工具,如果您在这个范围内考虑到一个功能,请随时提交pull-request。
我们也将乐意合并与官方国家、州或地区假日列表匹配的任何假日文件。
致谢
基于Christopher "rmblstrp"的工作,请参阅Carbon PR #706