باستخدام spatie/opening-hours يمكنك إنشاء كائن يصف ساعات عمل الشركة، والتي يمكنك الاستعلام عنها open أو closed في أيام أو تواريخ محددة، أو استخدامها لعرض الأوقات يوميًا.
يمكن استخدام spatie/opening-hours مباشرة على Carbon بفضل cmixin/وقت العمل حتى تتمكن من الاستفادة من ميزات ساعات العمل مباشرة على كائنات التاريخ المحسنة.
يتم إنشاء مجموعة من ساعات العمل عن طريق تمرير جدول منتظم، وقائمة الاستثناءات.
// 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اقرأ قسم الاستخدام للحصول على واجهة برمجة التطبيقات الكاملة.
Spatie هي وكالة تصميم مواقع الإنترنت مقرها في أنتويرب، بلجيكا. ستجد نظرة عامة على جميع مشاريعنا مفتوحة المصدر على موقعنا.
نحن نستثمر الكثير من الموارد في إنشاء أفضل الحزم مفتوحة المصدر في فئتها. يمكنك دعمنا عن طريق شراء أحد منتجاتنا المدفوعة.
نحن نقدر بشدة إرسالك لنا بطاقة بريدية من مسقط رأسك، مع ذكر الحزمة (الحزم) التي تستخدمها. ستجد عنواننا على صفحة الاتصال لدينا. ننشر جميع البطاقات البريدية المستلمة على جدار البطاقات البريدية الافتراضية لدينا.
يمكنك تثبيت الحزمة عبر الملحن:
composer require spatie/opening-hours يجب استخدام الحزمة فقط من خلال فئة OpeningHours . هناك أيضًا ثلاث فئات لكائنات القيمة مستخدمة طوال الوقت، Time ، الذي يمثل وقتًا واحدًا، TimeRange ، الذي يمثل فترة ببداية ونهاية، و openingHoursForDay ، الذي يمثل مجموعة من TimeRange التي لا يمكن أن تتداخل.
SpatieOpeningHoursOpeningHoursOpeningHours::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 ليوم عادي. اليوم عبارة عن سلسلة صغيرة من اسم اليوم باللغة الإنجليزية.
$ 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يتم التحقق مما إذا كان النشاط التجاري مفتوحًا (يحتوي على نطاق واحد على الأقل من ساعات العمل) في يوم ما وفقًا للجدول العادي.
$ openingHours -> isOpenOn ( ' saturday ' );إذا كانت السلسلة المحددة عبارة عن تاريخ، فسوف تتحقق مما إذا كانت مفتوحة (تحتوي على نطاق واحد على الأقل من ساعات العمل) مع الأخذ في الاعتبار جدول اليوم العادي والاستثناءات المحتملة.
$ 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التحقق مما إذا كان النشاط التجاري مفتوحًا على مدار الساعة طوال أيام الأسبوع، وليس به استثناءات ولا مرشحات.
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::nextOpenOpeningHours::nextOpen(
?DateTimeInterface $ dateTime = null ,
?DateTimeInterface $ searchUntil = null ,
?DateTimeInterface $ cap = null ,
) : DateTimeInterface` إرجاع DateTime التالي المفتوح من DateTime المحدد ( $dateTime أو from now إذا كانت هذه المعلمة فارغة أو محذوفة).
إذا تم تمرير كائن DateTimeImmutable ، فسيتم إرجاع كائن DateTimeImmutable .
قم بتعيين $searchUntil على تاريخ لطرح استثناء إذا لم يتم العثور على وقت مفتوح قبل هذه اللحظة.
قم بتعيين $cap على تاريخ، لذلك إذا لم يتم العثور على وقت مفتوح قبل هذه اللحظة، فسيتم إرجاع $cap .
$ openingHours -> nextOpen ( new DateTime ( ' 2016-12-24 11:00:00 ' ));OpeningHours::nextCloseOpeningHours::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::previousOpenOpeningHours::previousOpen(
?DateTimeInterface $ dateTime = null ,
?DateTimeInterface $ searchUntil = null ,
?DateTimeInterface $ cap = null ,
) : DateTimeInterface` إرجاع DateTime المفتوح السابق من DateTime المحدد ( $dateTime أو from now إذا كانت هذه المعلمة فارغة أو محذوفة).
إذا تم تمرير كائن DateTimeImmutable ، فسيتم إرجاع كائن DateTimeImmutable .
قم بتعيين $searchUntil على تاريخ لطرح استثناء إذا لم يتم العثور على وقت مفتوح بعد هذه اللحظة.
قم بتعيين $cap على تاريخ، لذلك إذا لم يتم العثور على وقت مفتوح بعد هذه اللحظة، فسيتم إرجاع $cap .
$ openingHours -> previousOpen ( new DateTime ( ' 2016-12-24 11:00:00 ' ));OpeningHours::previousCloseOpeningHours::previousClose(
?DateTimeInterface $ dateTime = null ,
?DateTimeInterface $ searchUntil = null ,
?DateTimeInterface $ cap = null ,
) : DateTimeInterface` إرجاع DateTime الإغلاق السابق من DateTime المحدد ( $dateTime أو من الآن إذا كانت هذه المعلمة فارغة أو محذوفة).
إذا تم تمرير كائن DateTimeImmutable ، فسيتم إرجاع كائن DateTimeImmutable .
قم بتعيين $searchUntil على تاريخ لطرح استثناء إذا لم يتم العثور على وقت إغلاق بعد هذه اللحظة.
قم بتعيين $cap على تاريخ، لذلك إذا لم يتم العثور على وقت إغلاق بعد هذه اللحظة، فسيتم إرجاع $cap .
$ openingHours -> nextClose ( new DateTime ( ' 2016-12-24 11:00:00 ' ));OpeningHours::diffInOpenHours(DateTimeInterface $startDate, DateTimeInterface $endDate) : floatقم بإرجاع مقدار الوقت المفتوح (عدد الساعات كرقم عائم) بين تاريخين/مرات.
$ 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قم بإرجاع مقدار الوقت المفتوح (عدد الدقائق كرقم عائم) بين تاريخين/مرتين.
OpeningHours::diffInOpenSeconds(DateTimeInterface $startDate, DateTimeInterface $endDate) : floatقم بإرجاع مقدار الوقت المفتوح (عدد الثواني كرقم عائم) بين تاريخين/مرات.
OpeningHours::diffInClosedHours(DateTimeInterface $startDate, DateTimeInterface $endDate) : floatقم بإرجاع مقدار الوقت المغلق (عدد الساعات كرقم عائم) بين تاريخين/مرات.
$ 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قم بإرجاع مقدار الوقت المغلق (عدد الدقائق كرقم عائم) بين تاريخين/مرتين.
OpeningHours::diffInClosedSeconds(DateTimeInterface $startDate, DateTimeInterface $endDate) : floatقم بإرجاع مقدار الوقت المغلق (عدد الثواني كرقم عائم) بين تاريخين/مرتين.
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 (بفضل mgrundkoetter)
الرجاء مراجعة سجل التغيير للحصول على مزيد من المعلومات حول ما تغير مؤخرًا.
composer test يرجى الاطلاع على المساهمة للحصول على التفاصيل.
إذا وجدت خطأً يتعلق بالأمان، فيرجى إرسال بريد إلكتروني إلى العنوان [email protected] بدلاً من استخدام أداة تعقب المشكلات.
أنت حر في استخدام هذه الحزمة، ولكن إذا وصلت إلى بيئة الإنتاج الخاصة بك، فإننا نقدر بشدة إرسالك لنا بطاقة بريدية من مسقط رأسك، مع ذكر الحزمة (الحزم) التي تستخدمها.
عنواننا هو: سباتي، كرويكسترات 22، 2018 أنتويرب، بلجيكا.
ننشر جميع البطاقات البريدية المستلمة على موقع شركتنا.
رخصة معهد ماساتشوستس للتكنولوجيا (MIT). يرجى الاطلاع على ملف الترخيص لمزيد من المعلومات.