Comments (8)
Sample code to recreate
PHP 7.2.19-0ubuntu0.18.04.1
using spatie/opening-hours (2.3.1)
<?php
use \Spatie\OpeningHours\OpeningHours;
require __DIR__ . '/vendor/autoload.php';
$data = [
'monday' => [
'hours' => [
'09:00-17:00',
]
],
'tuesday' => [
'hours' => [
'09:00-17:00',
]
],
'wednesday' => [
'hours' => [
'09:00-17:00',
]
],
'thursday' => [
'hours' => [
'09:00-17:00',
]
],
'friday' => [
'hours' => [
'09:00-17:00',
]
],
'saturday' => [
'hours' => [
'09:00-17:00',
]
],
'exceptions' => [
'2019-06-11' => [
'hours' => [
'09:00-17:00',
//'14:00-19:00',
]
],
'2019-06-12' => [
'hours' => [
'00:00-24:00',
]
],
'2019-06-13' => [
'hours' => [
'00:00-00:01',
'00:01-24:00',
]
]
]
];
$opening_hours = OpeningHours::create(array_merge($data,['overflow' => true]));
var_dump($opening_hours->isOpenAt(new DateTime('2019-06-11 09:00')));// Expected TRUE got TRUE
var_dump($opening_hours->isOpenAt(new DateTime('2019-06-12 09:00')));// Expected TRUE got TRUE
var_dump($opening_hours->isOpenAt(new DateTime('2019-06-13 09:00')));// Expected TRUE got TRUE
$opening_hours = OpeningHours::createAndMergeOverlappingRanges(array_merge($data,['overflow' => true]));
var_dump($opening_hours->isOpenAt(new DateTime('2019-06-11 09:00')));// Expected TRUE got TRUE
var_dump($opening_hours->isOpenAt(new DateTime('2019-06-12 09:00')));// Expected TRUE got FALSE
var_dump($opening_hours->isOpenAt(new DateTime('2019-06-13 09:00')));// Expected TRUE got FALSE
from opening-hours.
This issue is a duplicate of
#113
You might want to check the discussion there.
from opening-hours.
I dont think this is a duplicate
OpeningHours::create
and OpeningHours::createAndMergeOverlappingRanges
return different results with the same input
from opening-hours.
Indeed it's not a duplicate of #113.
The current case is:
$openingHours = \Spatie\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' => [
'2019-06-11' => ['00:00-24:00'],
],
]);
var_dump($openingHours->isOpenAt(new DateTime('2019-06-11 23:59:59'))); // true
But if we replace create
with createAndMergeOverlappingRanges
the result become false
and I agree it's not the expected behavior.
I will fix this point.
But definitions like this:
$opening_hours_data['exceptions']['2019-06-11']['hours'][] = '00:00-00:01';
$opening_hours_data['exceptions']['2019-06-11']['hours'][] = '00:01-00:00';
Is not something we will support. Overflowing is not supported for 'exceptions'
, that means when defining exceptions, you should never have a range end greater than the range start like 00:01 > 00:00.
from opening-hours.
Root cause identified: mergeOverlappingRanges
used internally by createAndMergeOverlappingRanges
returns ranges as TimeRange
, then create
properly handle both strings or TimeRange
in days definitions but it only expect stringsin 'exceptions'
. so it cast TimeRange
objects to strings and strval(TimeRange::fromString('00:00-24:00'))
returns '00:00-00:00'
So the bug to solve is:
TimeRange::fromString('00:00-24:00')->__toString()
Currently returns: '00:00-00:00'
Should return: '00:00-24:00'
from opening-hours.
@kylekatarnls , thanks for the fix, maybe you should add a note in the manual that overflow
only applies to the weekly schedule and not exceptions
from opening-hours.
Good news, I did not remember well. overflow
also works for exceptions.
from opening-hours.
2.3.2 released with the fix.
from opening-hours.
Related Issues (20)
- timezone is set on passed object when getting hours for a specific date HOT 2
- Free time slots during the day ? HOT 1
- nextOpen not respecting timezone HOT 2
- Timezone not working in currentOpenRange HOT 2
- I want to add schedule for specific date HOT 1
- Locale? HOT 1
- GitHub repository link not working HOT 2
- Support for holidays HOT 5
- Overflow support does not seem to work for createAndMergeOverlappingRanges HOT 2
- diffInOpenMinutes() does not work if only one day is configured as open HOT 6
- Date period in exceptions or start and end date for a set of days of the week in regular time HOT 4
- Exceptions with date ranges HOT 5
- [Feature request] createFromStructuredData method
- How to destroy OpeningHours object or update it ? HOT 1
- How to create an exception using datetime with seconds HOT 2
- Adding seconds precision to exceptions HOT 2
- Output time zone taken into account in all methods? HOT 2
- Supporting frontend library HOT 5
- previousOpen returns next open date HOT 1
- Unable to createFromStructureData after using `asStructuredData` on OpeningHours model
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from opening-hours.