Code Monkey home page Code Monkey logo

Comments (4)

kylekatarnls avatar kylekatarnls commented on August 22, 2024 1

We work around this bug using:
https://github.com/kylekatarnls/business-time/blob/master/src/Cmixin/BusinessTime.php#L256
I hope it can help you @nfragnet

from opening-hours.

kylekatarnls avatar kylekatarnls commented on August 22, 2024

Hi, I would add the fact that the method modify the date is unexpected. It should be copied. Then this should be reassigned here: https://github.com/spatie/opening-hours/blob/master/src/OpeningHours.php#L181 to work with immutable date.

from opening-hours.

kylekatarnls avatar kylekatarnls commented on August 22, 2024

An other problem is $timeRange iteration is not reset between 2 calls:
https://github.com/spatie/opening-hours/blob/master/src/OpeningHoursForDay.php#L76

from opening-hours.

nfragnet avatar nfragnet commented on August 22, 2024

Thanks a lot for the tips @kylekatarnls

As I had to decorate the whole object anyway for business purposes, I used the decoration to temporary fix the different issues I encountered. As I'm only using few methods, this solution - even if not the prettiest thing I coded - makes the job

final class MyOpeningHours
{
    /**
     * @var OpeningHours
     */
    private $openingHours;

    /**
     * @var string
     */
    private $tz;

    public function __construct(array $data, string $tz = 'UTC')
    {
        $this->openingHours = OpeningHours::create($data);
        $this->openingHours->setTimezone($tz);

        $this->tz = $tz;
    }

    public function nextOpen(DateTimeInterface $dateTime) : DateTime
    {
        $clonedOpeningHours = OpeningHours::create($this->toArray());
        $clonedOpeningHours->setTimezone($this->tz);
        $clonedDateTime = new DateTime($dateTime->format(DateTime::ATOM));

        return $clonedOpeningHours->nextOpen($clonedDateTime);
    }

    /**
     * Return the array that can be used to rebuild another OpeningHours object
     *
     * @return array In a format acceptable by the __construct and factory method
     *
     * [
     *     'monday' => [...]
     *     'tuesday' => [...]
     *     ...
     * ]
     */
    public function toArray() : array { //... }
}

I may use your workaround if our needs evolve before the correction is merged :) thanks anyway

from opening-hours.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.