باستخدام 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
التي لا يمكن أن تتداخل.
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
ليوم عادي. اليوم عبارة عن سلسلة صغيرة من اسم اليوم باللغة الإنجليزية.
$ 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::nextOpen
OpeningHours::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::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
أو from now إذا كانت هذه المعلمة فارغة أو محذوفة).
إذا تم تمرير كائن 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
أو من الآن إذا كانت هذه المعلمة فارغة أو محذوفة).
إذا تم تمرير كائن 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). يرجى الاطلاع على ملف الترخيص لمزيد من المعلومات.