ด้วย spatie/opening-hours
คุณจะสร้างออบเจ็กต์ที่อธิบายเวลาเปิดทำการของธุรกิจ ซึ่งคุณสามารถค้นหาเวลา open
หรือ closed
ในวันที่หรือวันที่ที่ระบุ หรือใช้เพื่อแสดงเวลาต่อวัน
spatie/opening-hours
สามารถใช้กับ Carbon ได้โดยตรงด้วย cmixin/business-time ดังนั้นคุณจึงได้รับประโยชน์จากฟีเจอร์เวลาทำการโดยตรงบนออบเจ็กต์วันที่ที่ปรับปรุงของคุณ
ชุดเวลาเปิดทำการจะถูกสร้างขึ้นโดยส่งผ่านกำหนดการปกติและรายการข้อยกเว้น
// Add the use at the top of each file where you want to use the OpeningHours class:
use Spatie OpeningHours OpeningHours ;
$ openingHours = OpeningHours:: create ([
' monday ' => [ ' 09:00-12:00 ' , ' 13:00-18:00 ' ],
' tuesday ' => [ ' 09:00-12:00 ' , ' 13:00-18:00 ' ],
' wednesday ' => [ ' 09:00-12:00 ' ],
' thursday ' => [ ' 09:00-12:00 ' , ' 13:00-18:00 ' ],
' friday ' => [ ' 09:00-12:00 ' , ' 13:00-20:00 ' ],
' saturday ' => [ ' 09:00-12:00 ' , ' 13:00-16:00 ' ],
' sunday ' => [],
' exceptions ' => [
' 2016-11-11 ' => [ ' 09:00-12:00 ' ],
' 2016-12-25 ' => [],
' 01-01 ' => [], // Recurring on each 1st of January
' 12-25 ' => [ ' 09:00-12:00 ' ], // Recurring on each 25th of December
],
]);
// This will allow you to display things like:
$ now = new DateTime ( ' now ' );
$ range = $ openingHours -> currentOpenRange ( $ now );
if ( $ range ) {
echo " It's open since " . $ range -> start (). "n" ;
echo " It will close at " . $ range -> end (). "n" ;
} else {
echo " It's closed since " . $ openingHours -> previousClose ( $ now )-> format ( ' l H:i ' ). "n" ;
echo " It will re-open at " . $ openingHours -> nextOpen ( $ now )-> format ( ' l H:i ' ). "n" ;
}
สามารถสอบถามออบเจ็กต์ได้หนึ่งวันในสัปดาห์ ซึ่งจะส่งกลับผลลัพธ์ตามกำหนดการปกติ:
// Open on Mondays:
$ openingHours -> isOpenOn ( ' monday ' ); // true
// Closed on Sundays:
$ openingHours -> isOpenOn ( ' sunday ' ); // false
นอกจากนี้ยังสามารถสอบถามวันที่และเวลาที่เฉพาะเจาะจงได้:
// Closed because it's after hours:
$ openingHours -> isOpenAt ( new DateTime ( ' 2016-09-26 19:00:00 ' )); // false
// Closed because Christmas was set as an exception
$ openingHours -> isOpenOn ( ' 2016-12-25 ' ); // false
นอกจากนี้ยังสามารถส่งคืนอาร์เรย์ของเวลาทำการสำหรับสัปดาห์หรือวันได้:
// OpeningHoursForDay object for the regular schedule
$ openingHours -> forDay ( ' monday ' );
// OpeningHoursForDay[] for the regular schedule, keyed by day name
$ openingHours -> forWeek ();
// Array of day with same schedule for the regular schedule, keyed by day name, days combined by working hours
$ openingHours -> forWeekCombined ();
// OpeningHoursForDay object for a specific day
$ openingHours -> forDate ( new DateTime ( ' 2016-12-25 ' ));
// OpeningHoursForDay[] of all exceptions, keyed by date
$ openingHours -> exceptions ();
ในการก่อสร้าง คุณสามารถตั้งค่าสถานะสำหรับเวลาที่ล้นข้ามวันได้ ตัวอย่างเช่น สำหรับไนต์คลับที่เปิดจนถึงตี 3 ในวันศุกร์และวันเสาร์:
$ openingHours = Spatie OpeningHours OpeningHours:: create ([
' overflow ' => true ,
' friday ' => [ ' 20:00-03:00 ' ],
' saturday ' => [ ' 20:00-03:00 ' ],
], null );
ซึ่งช่วยให้ API สามารถเพิ่มเติมจากข้อมูลของวันก่อนหน้าเพื่อตรวจสอบว่าเวลาทำการเปิดจากช่วงเวลาหรือไม่
คุณสามารถเพิ่มข้อมูลในคำจำกัดความแล้วดึงข้อมูลได้:
$ openingHours = OpeningHours:: create ([
' monday ' => [
' data ' => ' Typical Monday ' ,
' 09:00-12:00 ' ,
' 13:00-18:00 ' ,
],
' tuesday ' => [
' 09:00-12:00 ' ,
' 13:00-18:00 ' ,
[
' 19:00-21:00 ' ,
' data ' => ' Extra on Tuesday evening ' ,
],
],
' exceptions ' => [
' 2016-12-25 ' => [
' data ' => ' Closed for Christmas ' ,
],
],
]);
echo $ openingHours -> forDay ( ' monday ' )-> data ; // Typical Monday
echo $ openingHours -> forDate ( new DateTime ( ' 2016-12-25 ' ))-> data ; // Closed for Christmas
echo $ openingHours -> forDay ( ' tuesday ' )[ 2 ]-> data ; // Extra on Tuesday evening
ในตัวอย่างข้างต้น ข้อมูลเป็นสตริง แต่อาจเป็นค่าชนิดใดก็ได้ ดังนั้นคุณจึงสามารถฝังคุณสมบัติหลายรายการในอาร์เรย์ได้
เพื่อความสะดวกของโครงสร้าง คู่ข้อมูล-ชั่วโมงสามารถเป็นอาร์เรย์ที่เชื่อมโยงอย่างสมบูรณ์ ดังนั้นตัวอย่างข้างต้นจึงเทียบเท่ากับตัวอย่างต่อไปนี้อย่างเคร่งครัด:
$ openingHours = OpeningHours:: create ([
' monday ' => [
' hours ' => [
' 09:00-12:00 ' ,
' 13:00-18:00 ' ,
],
' data ' => ' Typical Monday ' ,
],
' tuesday ' => [
[ ' hours ' => ' 09:00-12:00 ' ],
[ ' hours ' => ' 13:00-18:00 ' ],
[ ' hours ' => ' 19:00-21:00 ' , ' data ' => ' Extra on Tuesday evening ' ],
],
// Open by night from Wednesday 22h to Thursday 7h:
' wednesday ' => [ ' 22:00-24:00 ' ], // use the special "24:00" to reach midnight included
' thursday ' => [ ' 00:00-07:00 ' ],
' exceptions ' => [
' 2016-12-25 ' => [
' hours ' => [],
' data ' => ' Closed for Christmas ' ,
],
],
]);
คุณสามารถใช้ตัวคั่น to
ระบุหลายวันในคราวเดียว สำหรับสัปดาห์หรือสำหรับข้อยกเว้น:
$ openingHours = OpeningHours:: create ([
' monday to friday ' => [ ' 09:00-19:00 ' ],
' saturday to sunday ' => [],
' exceptions ' => [
// Every year
' 12-24 to 12-26 ' => [
' hours ' => [],
' data ' => ' Holidays ' ,
],
// Only happening in 2024
' 2024-06-25 to 2024-07-01 ' => [
' hours ' => [],
' data ' => ' Closed for works ' ,
],
],
]);
เครื่องมือโครงสร้างสุดท้ายคือตัวกรอง ซึ่งช่วยให้คุณสามารถส่งผ่านการปิด (หรือการอ้างอิงฟังก์ชัน/เมธอดที่เรียกใช้ได้) ซึ่งใช้วันที่เป็นพารามิเตอร์และส่งคืนการตั้งค่าสำหรับวันที่ที่กำหนด
$ openingHours = OpeningHours:: create ([
' monday ' => [
' 09:00-12:00 ' ,
],
' filters ' => [
function ( $ date ) {
$ year = intval ( $ date -> format ( ' Y ' ));
$ easterMonday = new DateTimeImmutable ( ' 2018-03-21 + ' .( easter_days ( $ year ) + 1 ). ' days ' );
if ( $ date -> format ( ' m-d ' ) === $ easterMonday -> format ( ' m-d ' )) {
return []; // Closed on Easter Monday
// Any valid exception-array can be returned here (range of hours, with or without data)
}
// Else the filter does not apply to the given date
},
],
]);
หากพบสิ่งที่เรียกได้ในคุณสมบัติ "exceptions"
มันจะถูกเพิ่มลงในตัวกรองโดยอัตโนมัติ เพื่อให้คุณสามารถผสมตัวกรองและข้อยกเว้นทั้งสองในอาร์เรย์ ข้อยกเว้นได้ ตัวกรองแรกที่ส่งกลับค่าที่ไม่ใช่ค่าว่างจะมีความสำคัญเหนือกว่าตัวกรองถัดไป และอาร์เรย์ ตัวกรอง จะมีลำดับความสำคัญเหนือตัวกรองภายในอาร์เรย์ ข้อยกเว้น
คำเตือน: เราจะวนซ้ำตัวกรองทั้งหมดในแต่ละวันที่เราต้องดึงข้อมูลเวลาเปิดทำการ และไม่สามารถระบุหรือแคชผลลัพธ์ได้ (อาจเป็นฟังก์ชันสุ่ม) ดังนั้นคุณต้องระมัดระวังตัวกรอง ตัวกรองมากเกินไป หรือกระบวนการภายในตัวกรองที่ใช้เวลานาน อาจมีผลกระทบอย่างมีนัยสำคัญต่อประสิทธิภาพการทำงาน
นอกจากนี้ยังสามารถส่งคืน DateTime
ที่เปิดหรือปิดถัดไปจาก DateTime
ที่กำหนด
// The next open datetime is tomorrow morning, because we’re closed on 25th of December.
$ nextOpen = $ openingHours -> nextOpen ( new DateTime ( ' 2016-12-25 10:00:00 ' )); // 2016-12-26 09:00:00
// The next open datetime is this afternoon, after the lunch break.
$ nextOpen = $ openingHours -> nextOpen ( new DateTime ( ' 2016-12-24 11:00:00 ' )); // 2016-12-24 13:00:00
// The next close datetime is at noon.
$ nextClose = $ openingHours -> nextClose ( new DateTime ( ' 2016-12-24 10:00:00 ' )); // 2016-12-24 12:00:00
// The next close datetime is tomorrow at noon, because we’re closed on 25th of December.
$ nextClose = $ openingHours -> nextClose ( new DateTime ( ' 2016-12-25 15:00:00 ' )); // 2016-12-26 12:00:00
อ่านส่วนการใช้งานสำหรับ API แบบเต็ม
Spatie เป็นเอเจนซี่ออกแบบเว็บไซต์ที่ตั้งอยู่ในเมืองแอนต์เวิร์ป ประเทศเบลเยียม คุณจะพบภาพรวมของโครงการโอเพ่นซอร์สทั้งหมดของเราบนเว็บไซต์ของเรา
เราลงทุนทรัพยากรจำนวนมากเพื่อสร้างแพ็คเกจโอเพ่นซอร์สที่ดีที่สุดในระดับเดียวกัน คุณสามารถสนับสนุนเราได้โดยการซื้อหนึ่งในผลิตภัณฑ์ที่ต้องชำระเงินของเรา
เราขอขอบคุณอย่างยิ่งที่คุณส่งโปสการ์ดจากบ้านเกิดของคุณถึงเรา โดยระบุว่าคุณใช้แพ็คเกจใดของเรา คุณจะพบที่อยู่ของเราในหน้าติดต่อของเรา เราเผยแพร่โปสการ์ดที่ได้รับทั้งหมดบนวอลล์โปสการ์ดเสมือนของเรา
คุณสามารถติดตั้งแพ็คเกจผ่านทางผู้แต่ง:
composer require spatie/opening-hours
ควรใช้แพ็คเกจผ่านคลาส OpeningHours
เท่านั้น นอกจากนี้ยังมีคลาสอ็อบเจ็กต์ค่าสามคลาสที่ใช้ตลอด ได้แก่ Time
ซึ่งแสดงถึงช่วงเวลาเดียว TimeRange
ซึ่งแสดงถึงช่วงเวลาที่มีจุดเริ่มต้นและจุดสิ้นสุด และ openingHoursForDay
ซึ่งแสดงถึงชุดของ TimeRange
ที่ไม่สามารถทับซ้อนกันได้
SpatieOpeningHoursOpeningHours
OpeningHours::create(array $data, $timezone = null, $toutputTimezone = null): SpatieOpeningHoursOpeningHours
วิธีการแบบคงที่ของโรงงานเพื่อกรอกชุดเวลาเปิดทำการ
$ openingHours = OpeningHours:: create ([
' monday ' => [ ' 09:00-12:00 ' , ' 13:00-18:00 ' ],
// ...
]);
หากไม่มีการระบุเขตเวลา OpeningHours
จะถือว่าคุณส่งออบเจ็กต์ DateTime
ที่มีเขตเวลาที่ตรงกับกำหนดการของคุณเสมอ
หากคุณส่ง $timezone
เป็นอาร์กิวเมนต์ที่สองหรือผ่าน 'timezone'
ของคีย์อาร์เรย์ (อาจเป็นวัตถุ DateTimeZone
หรือ string
ก็ได้) วันที่ที่ส่งจะถูกแปลงเป็นเขตเวลานี้ที่จุดเริ่มต้นของแต่ละวิธี ดังนั้นหาก วิธีการส่งคืนวัตถุวันที่ (เช่น nextOpen
, nextClose
, previousOpen
, previousClose
, currentOpenRangeStart
หรือ currentOpenRangeEnd
) จากนั้นจะถูกแปลงกลับเป็นเขตเวลาดั้งเดิมก่อนเอาต์พุตเพื่อให้วัตถุสามารถสะท้อนถึง ช่วงเวลาในเวลาท้องถิ่นของผู้ใช้ ในขณะที่ OpeningHours
สามารถคงอยู่ในเขตเวลาธุรกิจของตนเองได้
หรือคุณสามารถระบุทั้งเขตเวลาอินพุตและเอาต์พุต (โดยใช้อาร์กิวเมนต์ที่สองและสาม) หรือใช้อาร์เรย์:
$ openingHours = OpeningHours:: create ([
' monday ' => [ ' 09:00-12:00 ' , ' 13:00-18:00 ' ],
' timezone ' => [
' input ' => ' America/New_York ' ,
' output ' => ' Europe/Oslo ' ,
],
]);
OpeningHours::mergeOverlappingRanges(array $schedule) : array
เพื่อความปลอดภัย การสร้างออบเจ็กต์ OpeningHours
ที่มีช่วงที่ทับซ้อนกันจะทำให้เกิดข้อยกเว้น เว้นแต่คุณจะผ่าน 'overflow' => true,
อย่างชัดเจนในคำจำกัดความอาร์เรย์เวลาเปิดทำการ คุณยังสามารถรวมเข้าด้วยกันได้อย่างชัดเจน
$ ranges = [
' monday ' => [ ' 08:00-11:00 ' , ' 10:00-12:00 ' ],
];
$ mergedRanges = OpeningHours:: mergeOverlappingRanges ( $ ranges ); // Monday becomes ['08:00-12:00']
OpeningHours:: create ( $ mergedRanges );
// Or use the following shortcut to create from ranges that possibly overlap:
OpeningHours:: createAndMergeOverlappingRanges ( $ ranges );
ไม่จำเป็นต้องบังคับทุกวัน หากขาดวันจะถูกกำหนดให้เป็นปิด
OpeningHours::fill(array $data): SpatieOpeningHoursOpeningHours
เช่นเดียวกับ create
แต่ไม่คงที่
$ openingHours = ( new OpeningHours )-> fill ([
' monday ' => [ ' 09:00-12:00 ' , ' 13:00-18:00 ' ],
// ...
]);
OpeningHours::forWeek(): SpatieOpeningHoursOpeningHoursForDay[]
ส่งกลับอาร์เรย์ของวัตถุ OpeningHoursForDay
สำหรับสัปดาห์ปกติ
$ openingHours -> forWeek ();
OpeningHours::forWeekCombined(): array
ส่งกลับอาร์เรย์ของวัน คีย์อาร์เรย์คือวันแรกที่มีชั่วโมงเท่ากัน ค่าอาร์เรย์คือวันที่มีเวลาทำงานเท่ากันและออบเจ็กต์ OpeningHoursForDay
$ openingHours -> forWeekCombined ();
OpeningHours::forWeekConsecutiveDays(): array
ส่งกลับอาร์เรย์ของวันที่ต่อกัน ซึ่งเป็นวันที่อยู่ติดกันซึ่งมีชั่วโมงเท่ากัน คีย์อาร์เรย์คือวันแรกที่มีชั่วโมงเท่ากัน ค่าอาร์เรย์คือวันที่มีเวลาทำงานเท่ากันและออบเจ็กต์ OpeningHoursForDay
คำเตือน : วันที่ติดต่อกันถือเป็นตั้งแต่วันจันทร์ถึงวันอาทิตย์โดยไม่มีการวนซ้ำ (วันจันทร์ไม่ต่อเนื่องกันถึงวันอาทิตย์) ไม่ว่าจะเรียงลำดับวันในข้อมูลเริ่มต้นก็ตาม
$ openingHours -> forWeekConsecutiveDays ();
OpeningHours::forDay(string $day): SpatieOpeningHoursOpeningHoursForDay
ส่งกลับวัตถุ OpeningHoursForDay
สำหรับวันปกติ a day เป็นสตริงตัวพิมพ์เล็กของชื่อวันในภาษาอังกฤษ
$ openingHours -> forDay ( ' monday ' );
OpeningHours::forDate(DateTimeInterface $dateTime): SpatieOpeningHoursOpeningHoursForDay
ส่งกลับวัตถุ OpeningHoursForDay
สำหรับวันที่ที่ระบุ ค้นหาข้อยกเว้นในวันนั้น มิฉะนั้นจะส่งคืนเวลาทำการตามกำหนดการปกติ
$ openingHours -> forDate ( new DateTime ( ' 2016-12-25 ' ));
OpeningHours::exceptions(): SpatieOpeningHoursOpeningHoursForDay[]
ส่งกลับอาร์เรย์ของออบเจ็กต์ OpeningHoursForDay
ทั้งหมดสำหรับข้อยกเว้น โดยคีย์ด้วยสตริงวันที่ Ymd
$ openingHours -> exceptions ();
OpeningHours::isOpenOn(string $day): bool
ตรวจสอบว่าธุรกิจเปิดทำการ (มีช่วงเวลาเปิดทำการอย่างน้อย 1 ช่วง) ในหนึ่งวันตามกำหนดการปกติ
$ openingHours -> isOpenOn ( ' saturday ' );
หากสตริงที่ระบุเป็นวันที่ ระบบจะตรวจสอบว่าเปิดอยู่หรือไม่ (มีช่วงเวลาเปิดอย่างน้อย 1 ช่วง) โดยพิจารณาทั้งกำหนดการวันปกติและข้อยกเว้นที่เป็นไปได้
$ openingHours -> isOpenOn ( ' 2020-09-03 ' );
$ openingHours -> isOpenOn ( ' 09-03 ' ); // If year is omitted, current year is used instead
OpeningHours::isClosedOn(string $day): bool
ตรวจสอบว่าธุรกิจปิดทำการในหนึ่งวันตามกำหนดการปกติหรือไม่
$ openingHours -> isClosedOn ( ' sunday ' );
OpeningHours::isOpenAt(DateTimeInterface $dateTime): bool
ตรวจสอบว่าธุรกิจเปิดทำการในวันที่ระบุ ในเวลาที่กำหนดหรือไม่
$ openingHours -> isOpenAt ( new DateTime ( ' 2016-26-09 20:00 ' ));
OpeningHours::isClosedAt(DateTimeInterface $dateTime): bool
ตรวจสอบว่าธุรกิจปิดทำการในวันที่ระบุหรือเวลาที่กำหนดหรือไม่
$ openingHours -> isClosedAt ( new DateTime ( ' 2016-26-09 20:00 ' ));
OpeningHours::isOpen(): bool
ตรวจสอบว่าธุรกิจเปิดอยู่หรือไม่
$ openingHours -> isOpen ();
OpeningHours::isClosed(): bool
ตรวจสอบว่าธุรกิจปิดอยู่ในขณะนี้หรือไม่
$ openingHours -> isClosed ();
OpeningHours::isAlwaysOpen(): bool
ตรวจสอบว่าธุรกิจเปิดตลอด 24 ชั่วโมงทุกวัน ไม่มีข้อยกเว้น และไม่มีตัวกรอง
if ( $ openingHours -> isAlwaysOpen ()) {
echo ' This business is open all day long every day. ' ;
}
OpeningHours::isAlwaysClosed(): bool
ตรวจสอบว่าธุรกิจไม่เคยเปิด ไม่มีข้อยกเว้น และไม่มีตัวกรอง
OpeningHours
ยอมรับอาร์เรย์หรือรายการว่าง โดยทุก ๆ วันในสัปดาห์จะว่างเปล่าโดยไม่มีอคติ
หากสถานะไม่ถูกต้องในโดเมนของคุณ คุณควรใช้วิธีนี้เพื่อสร้างข้อยกเว้นหรือแสดงข้อผิดพลาด
if ( $ openingHours -> isAlwaysClosed ()) {
throw new RuntimeException ( ' Opening hours missing ' );
}
OpeningHours::nextOpen
OpeningHours::nextOpen(
?DateTimeInterface $ dateTime = null ,
?DateTimeInterface $ searchUntil = null ,
?DateTimeInterface $ cap = null ,
) : DateTimeInterface`
ส่งคืน DateTime
ที่เปิดถัดไปจาก DateTime
ที่กำหนด ( $dateTime
หรือจากตอนนี้หากพารามิเตอร์นี้เป็น null หรือละไว้)
ถ้าวัตถุ DateTimeImmutable
ถูกส่งไป วัตถุ DateTimeImmutable
จะถูกส่งกลับ
ตั้งค่า $searchUntil
เป็นวันที่เพื่อส่งข้อยกเว้นหากไม่พบเวลาเปิดทำการก่อนช่วงเวลานี้
ตั้งค่า $cap
เป็นวันที่ ดังนั้นหากไม่พบเวลาเปิดทำการก่อนช่วงเวลานี้ ระบบจะส่งคืน $cap
$ openingHours -> nextOpen ( new DateTime ( ' 2016-12-24 11:00:00 ' ));
OpeningHours::nextClose
OpeningHours::nextClose(
?DateTimeInterface $ dateTime = null ,
?DateTimeInterface $ searchUntil = null ,
?DateTimeInterface $ cap = null ,
) : DateTimeInterface`
ส่งกลับ DateTime
ที่ปิดครั้งถัดไปจาก DateTime
ที่กำหนด ( $dateTime
หรือจากตอนนี้หากพารามิเตอร์นี้เป็นโมฆะหรือละไว้)
ถ้าวัตถุ DateTimeImmutable
ถูกส่งไป วัตถุ DateTimeImmutable
จะถูกส่งกลับ
ตั้งค่า $searchUntil
เป็นวันที่เพื่อส่งข้อยกเว้นหากไม่พบเวลาปิดก่อนช่วงเวลานี้
ตั้งค่า $cap
เป็นวันที่ ดังนั้นหากไม่พบเวลาปิดก่อนช่วงเวลานี้ ระบบจะส่งคืน $cap
หากกำหนดการเปิดอยู่เสมอหรือปิดตลอดเวลา จะไม่พบการเปลี่ยนแปลงสถานะ ดังนั้น nextOpen
(แต่ยัง previousOpen
, nextClose
และ previousClose
) จะโยน MaximumLimitExceeded
คุณสามารถจับมันและตอบสนองตามนั้น หรือคุณสามารถใช้วิธี isAlwaysOpen
/ isAlwaysClosed
เพื่อคาดการณ์ กรณีดังกล่าว
$ openingHours -> nextClose ( new DateTime ( ' 2016-12-24 11:00:00 ' ));
OpeningHours::previousOpen
OpeningHours::previousOpen(
?DateTimeInterface $ dateTime = null ,
?DateTimeInterface $ searchUntil = null ,
?DateTimeInterface $ cap = null ,
) : DateTimeInterface`
ส่งคืน DateTime
ที่เปิดก่อนหน้าจาก DateTime
ที่กำหนด ( $dateTime
หรือจากตอนนี้หากพารามิเตอร์นี้เป็น null หรือละไว้)
ถ้าวัตถุ DateTimeImmutable
ถูกส่งไป วัตถุ DateTimeImmutable
จะถูกส่งกลับ
ตั้งค่า $searchUntil
เป็นวันที่เพื่อส่งข้อยกเว้นหากไม่พบเวลาเปิดหลังจากช่วงเวลานี้
ตั้งค่า $cap
เป็นวันที่ ดังนั้นหากไม่พบเวลาเปิดหลังจากช่วงเวลานี้ ระบบจะส่งคืน $cap
$ openingHours -> previousOpen ( new DateTime ( ' 2016-12-24 11:00:00 ' ));
OpeningHours::previousClose
OpeningHours::previousClose(
?DateTimeInterface $ dateTime = null ,
?DateTimeInterface $ searchUntil = null ,
?DateTimeInterface $ cap = null ,
) : DateTimeInterface`
ส่งกลับ DateTime
ที่ปิดก่อนหน้าจาก DateTime
ที่กำหนด ( $dateTime
หรือจากตอนนี้หากพารามิเตอร์นี้เป็น null หรือละไว้)
ถ้าวัตถุ DateTimeImmutable
ถูกส่งไป วัตถุ DateTimeImmutable
จะถูกส่งกลับ
ตั้งค่า $searchUntil
เป็นวันที่เพื่อส่งข้อยกเว้นหากไม่พบเวลาปิดหลังจากช่วงเวลานี้
ตั้ง $cap
เป็นวันที่ ดังนั้นหากไม่พบเวลาปิดหลังจากช่วงเวลานี้ ระบบจะส่งคืน $cap
$ openingHours -> nextClose ( new DateTime ( ' 2016-12-24 11:00:00 ' ));
OpeningHours::diffInOpenHours(DateTimeInterface $startDate, DateTimeInterface $endDate) : float
ส่งกลับจำนวนเวลาเปิด (จำนวนชั่วโมงเป็นตัวเลขลอยตัว) ระหว่างวันที่/เวลา 2 วัน
$ openingHours -> diffInOpenHours ( new DateTime ( ' 2016-12-24 11:00:00 ' ), new DateTime ( ' 2016-12-24 16:34:25 ' ));
OpeningHours::diffInOpenMinutes(DateTimeInterface $startDate, DateTimeInterface $endDate) : float
ส่งกลับจำนวนเวลาเปิด (จำนวนนาทีที่เป็นตัวเลขลอยตัว) ระหว่างวันที่/เวลา 2 รายการ
OpeningHours::diffInOpenSeconds(DateTimeInterface $startDate, DateTimeInterface $endDate) : float
ส่งกลับจำนวนเวลาเปิด (จำนวนวินาทีที่เป็นตัวเลขลอยตัว) ระหว่างวันที่/เวลา 2 วัน
OpeningHours::diffInClosedHours(DateTimeInterface $startDate, DateTimeInterface $endDate) : float
ส่งกลับจำนวนเวลาปิด (จำนวนชั่วโมงที่เป็นตัวเลขลอยตัว) ระหว่างวันที่/เวลา 2 วัน
$ openingHours -> diffInClosedHours ( new DateTime ( ' 2016-12-24 11:00:00 ' ), new DateTime ( ' 2016-12-24 16:34:25 ' ));
OpeningHours::diffInClosedMinutes(DateTimeInterface $startDate, DateTimeInterface $endDate) : float
ส่งกลับจำนวนเวลาปิด (จำนวนนาทีที่เป็นตัวเลขลอยตัว) ระหว่างวันที่/เวลา 2 วัน
OpeningHours::diffInClosedSeconds(DateTimeInterface $startDate, DateTimeInterface $endDate) : float
ส่งกลับจำนวนเวลาปิด (จำนวนวินาทีที่เป็นตัวเลขลอยตัว) ระหว่างวันที่/เวลา 2 วัน
OpeningHours::currentOpenRange(DateTimeInterface $dateTime) : false | TimeRange
ส่งกลับอินสแตนซ์ SpatieOpeningHoursTimeRange
ของช่วงที่เปิดปัจจุบันหากธุรกิจเปิดอยู่ จะส่งกลับค่าเท็จหากธุรกิจปิดอยู่
$ range = $ openingHours -> currentOpenRange ( new DateTime ( ' 2016-12-24 11:00:00 ' ));
if ( $ range ) {
echo " It's open since " . $ range -> start (). "n" ;
echo " It will close at " . $ range -> end (). "n" ;
} else {
echo " It's closed " ;
}
เมธอด start()
และ end()
ส่งคืนอินสแตนซ์ SpatieOpeningHoursTime
อินสแตนซ์ Time
ที่สร้างจากวันที่สามารถจัดรูปแบบด้วยข้อมูลวันที่ได้ สิ่งนี้มีประโยชน์สำหรับช่วงที่ล้นเที่ยงคืน:
$ period = $ openingHours -> currentOpenRange ( new DateTime ( ' 2016-12-24 11:00:00 ' ));
if ( $ period ) {
echo " It's open since " . $ period -> start ()-> format ( ' D Gh ' ). "n" ;
echo " It will close at " . $ period -> end ()-> format ( ' D Gh ' ). "n" ;
} else {
echo " It's closed " ;
}
OpeningHours::currentOpenRangeStart(DateTimeInterface $dateTime) : false | DateTime
ส่งคืนอินสแตนซ์ DateTime
ของวันที่และเวลานับตั้งแต่เวลาที่ธุรกิจเปิดหากธุรกิจเปิดอยู่ จะส่งกลับค่าเท็จหากธุรกิจปิดอยู่
หมายเหตุ: วันที่อาจเป็นวันก่อนหน้าได้หากคุณใช้ช่วงกลางคืน
$ date = $ openingHours -> currentOpenRangeStart ( new DateTime ( ' 2016-12-24 11:00:00 ' ));
if ( $ date ) {
echo " It's open since " . $ date -> format ( ' H:i ' );
} else {
echo " It's closed " ;
}
OpeningHours::currentOpenRangeEnd(DateTimeInterface $dateTime) : false | DateTime
ส่งกลับอินสแตนซ์ DateTime
ของวันที่และเวลาจนถึงเวลาที่ธุรกิจจะเปิดหากธุรกิจเปิดอยู่ จะส่งกลับค่าเท็จหากธุรกิจถูกปิด
หมายเหตุ: วันที่อาจเป็นวันถัดไปได้หากคุณใช้ช่วงกลางคืน
$ date = $ openingHours -> currentOpenRangeEnd ( new DateTime ( ' 2016-12-24 11:00:00 ' ));
if ( $ date ) {
echo " It will close at " . $ date -> format ( ' H:i ' );
} else {
echo " It's closed " ;
}
OpeningHours::createFromStructuredData(array|string $data, $timezone = null, $outputTimezone = null): SpatieOpeningHoursOpeningHours
วิธีการจากโรงงานแบบคงที่เพื่อเติมชุดด้วยอาร์เรย์ https://schema.org/OpeningHoursSpecification หรือสตริง JSON
dayOfWeek
รองรับอาร์เรย์ของชื่อวัน (ปรุงแต่งโดย Google) หรืออาร์เรย์ของ URL ของวัน (ข้อกำหนดอย่างเป็นทางการของ schema.org)
$ openingHours = OpeningHours:: createFromStructuredData ( ' [
{
"@type": "OpeningHoursSpecification",
"opens": "08:00",
"closes": "12:00",
"dayOfWeek": [
"https://schema.org/Monday",
"https://schema.org/Tuesday",
"https://schema.org/Wednesday",
"https://schema.org/Thursday",
"https://schema.org/Friday"
]
},
{
"@type": "OpeningHoursSpecification",
"opens": "14:00",
"closes": "18:00",
"dayOfWeek": [
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday"
]
},
{
"@type": "OpeningHoursSpecification",
"opens": "00:00",
"closes": "00:00",
"validFrom": "2023-12-25",
"validThrough": "2023-12-25"
}
] ' );
OpeningHours::asStructuredData(strinf $format = 'H:i', string|DateTimeZone $timezone) : array
ส่งกลับค่า OpeningHoursSpecification เป็นอาร์เรย์
$ openingHours -> asStructuredData ();
$ openingHours -> asStructuredData ( ' H:i:s ' ); // Customize time format, could be 'h:i a', 'G:i', etc.
$ openingHours -> asStructuredData ( ' H:iP ' , ' -05:00 ' ); // Add a timezone
// Timezone can be numeric or string like "America/Toronto" or a DateTimeZone instance
// But be careful, the time is arbitrary applied on 1970-01-01, so it does not handle daylight
// saving time, meaning Europe/Paris is always +01:00 even in summer time.
SpatieOpeningHoursOpeningHoursForDay
คลาสนี้มีความหมายว่าอ่านอย่างเดียว มันใช้ ArrayAccess
, Countable
และ IteratorAggregate
เพื่อให้คุณสามารถประมวลผลรายการของ TimeRange
ในลักษณะเหมือนอาเรย์
SpatieOpeningHoursTimeRange
ออบเจ็กต์ค่าที่อธิบายช่วงเวลาพร้อมเวลาเริ่มต้นและเวลาสิ้นสุด สามารถส่งเป็นสตริงในรูปแบบ H:iH:i
SpatieOpeningHoursTime
วัตถุค่าที่อธิบายครั้งเดียว สามารถส่งเป็นสตริงในรูปแบบ H:i
คุณสามารถแปลงรูปแบบ OpenStreetMap เป็นวัตถุ OpeningHours
ได้โดยใช้ osm-opening-hours (ขอบคุณ mgrundkoetter)
โปรดดู CHANGELOG สำหรับข้อมูลเพิ่มเติมเกี่ยวกับสิ่งที่เปลี่ยนแปลงเมื่อเร็วๆ นี้
composer test
โปรดดูการมีส่วนร่วมเพื่อดูรายละเอียด
หากคุณพบข้อบกพร่องเกี่ยวกับการรักษาความปลอดภัย โปรดส่งอีเมลไปที่ [email protected] แทนการใช้ตัวติดตามปัญหา
คุณสามารถใช้แพ็คเกจนี้ได้อย่างอิสระ แต่หากมันเหมาะกับสภาพแวดล้อมการใช้งานจริงของคุณ เราขอขอบคุณอย่างยิ่งที่คุณส่งโปสการ์ดจากบ้านเกิดของคุณมาให้เรา โดยระบุว่าคุณกำลังใช้แพ็คเกจใดของเรา
ที่อยู่ของเราคือ: Spatie, Kruikstraat 22, 2018 แอนต์เวิร์ป, เบลเยียม
เราเผยแพร่ไปรษณียบัตรที่ได้รับทั้งหมดบนเว็บไซต์ของบริษัทของเรา
ใบอนุญาตเอ็มไอที (MIT) โปรดดูไฟล์ใบอนุญาตสำหรับข้อมูลเพิ่มเติม