Coder Social home page Coder Social logo

Comments (9)

BenMorel avatar BenMorel commented on September 16, 2024 2

Hi,

LocalDateTime represents a different concept from ZonedDateTime and PHP's DateTimeInterface: a date and time without a time-zone; so it makes no sense to extend DateTimeImmutable.

This is precisely what I dislike in PHP's implementation: a single class is used to represent many concepts (local date, local time, local date-time, date-time with a time zone, ...)

As for ZonedDateTime, extending DateTimeImmutable would create more problems than it solves, as ZonedDateTime would suddenly inherit from methods that return a DateTimeImmutable, which is very confusing, and some methods would conflict, such as getTimeZone().

For interoperability, what's necessary is a fromDateTime() and a toDateTime() method. The former is already implemented, while the latter is not.

I'm leaving this issue open until toDateTime() is implemented!

from date-time.

BenMorel avatar BenMorel commented on September 16, 2024 2

Consensus always wins, I guess! 😉

Added in 91a0c9c and released in 0.1.8.

from date-time.

solodkiy avatar solodkiy commented on September 16, 2024 1

The main problem with DateTimeImmutable is absence of easy way to convert it to DateTime (many libs still expect this type).

from date-time.

natebrunette avatar natebrunette commented on September 16, 2024 1

I agree, I think that interoperability with native PHP date classes is worth the method.

from date-time.

BenMorel avatar BenMorel commented on September 16, 2024

Fixed in 052c9d7 and released in version 0.1.6:

New method:

ZonedDateTime::toDateTime() : converts the ZonedDateTime to a native DateTime object.

Note that I hesitated to add a toDateTimeImmutable() method as well, but because it's trivial, I think we should leave this to the user:

$dateTime = $zonedDateTime->toDateTime();
$dateTimeImmutable = \DateTimeImmutable::createFromMutable($dateTime);

from date-time.

jkuchar avatar jkuchar commented on September 16, 2024

Why not return DateTimeImmutable in method toDateTime()? As DateTime is broken implementation. It mutable value object. I do not see any point in using DateTime class for anything.

from date-time.

BenMorel avatar BenMorel commented on September 16, 2024

Good question, I guess the choice I made was purely because of the naming: toDateTime() would return a DateTime.

I pretty much never use PHP's DateTime classes myself, so I'm not sure which of DateTime and DateTimeImmutable people use most and what they would expect here.

This can be changed in 0.9 if needed, but I'd love to hear other people's opinion here.

from date-time.

BenMorel avatar BenMorel commented on September 16, 2024

Note that PHP 7.3 added a DateTime::createFromImmutable() factory method (not documented yet), but this is not relevant anyway as brick/datetime targets PHP 7.1 at the moment.

@solodkiy makes a good point here, and it makes sense to keep the DateTime return type IMO.

Should we add toDateTimeImmutable() methods then? I still think that it clutters the API with methods that just call DateTimeImmutable::createFromMutable().

Let me know what you think.

from date-time.

jkuchar avatar jkuchar commented on September 16, 2024

I still think that it clutters the API with methods that just call DateTimeImmutable::createFromMutable().

Yep, it is definitely hard to read and it is quite common use-case. It makes sense to me to implemented also toDateTimeImmutable() as it is something cheap to do and makes it easy to cooperated with other PHP code (e.g. template filters, etc.)

from date-time.

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.