Download the PHP package brick/date-time without Composer
On this page you can find all versions of the php package brick/date-time. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Informations about the package date-time
Brick\DateTime
A powerful set of immutable classes to work with dates and times.
Introduction
This library builds an extensive API on top of the native PHP date-time classes, and adds missing concepts such as LocalDate
, LocalTime
, YearMonth
, MonthDay
, etc.
The classes follow the ISO 8601 standard for representing date and time concepts.
This component follows an important part of the JSR 310 (Date and Time API) specification from Java. Don't expect an exact match of class and method names though, as a number of differences exist for technical or practical reasons.
All the classes are immutable, they can be safely passed around without being affected.
Installation
This library is installable via Composer:
Requirements
This library requires PHP 8.1 or later.
Project status & release process
While this library is still under development, it is well tested and should be stable enough to use in production environments.
The current releases are numbered 0.x.y
. When a non-breaking change is introduced (adding new methods, optimizing existing code, etc.), y
is incremented.
When a breaking change is introduced, a new 0.x
version cycle is always started.
It is therefore safe to lock your project to a given release cycle, such as 0.7.*
.
If you need to upgrade to a newer release cycle, check the release history for a list of changes introduced by each further 0.x.0
version.
Overview
Main classes
The following classes/enums represent the date-time concepts:
DayOfWeek
: a day-of-week such as Monday (enum
)Duration
: a duration measured in seconds and nanosecondsInstant
: a point in time, with a nanosecond precisionInterval
: a period of time between two instantsLocalDate
: an isolated date such as2014-08-31
LocalDateRange
: an inclusive range of local dates, such as2014-01-01/2014-12-31
LocalDateTime
: a date-time without a time-zone, such as2014-08-31T10:15:30
LocalTime
: an isolated time such as10:15:30
Month
: a month-of-year such as January (enum
)MonthDay
: a combination of a month and a day, without a year, such as--12-31
Period
: a date-based amount of time, such as '2 years, 3 months and 4 days'TimeZoneOffset
: an offset-based time-zone, such as+01:00
TimeZoneRegion
: a region-based time-zone, such asEurope/London
Year
: a year in the proleptic calendarYearMonth
: a combination of a year and a month, such as2014-08
ZonedDateTime
: a date-time with a time-zone, such as2014-08-31T10:15:30+01:00
. This class is conceptually equivalent to the nativeDateTime
class
These classes belong to the Brick\DateTime
namespace.
Clocks
All objects read the current time from a Clock
implementation. The following implementations are available:
SystemClock
returns the system time; it's the default clockFixedClock
: returns a pre-configured timeOffsetClock
: adds an offset to another clockScaleClock
: makes another clock fast-forward by a scale factor
These classes belong to the Brick\DateTime\Clock
namespace.
In your application, you will most likely never touch the defaults, and always use the default clock:
In your tests however, you might need to set the current time to test your application in known conditions. To do this, you can either explicitly pass a Clock
instance to now()
methods:
Or you can change the default clock for all date-time classes. All methods such as now()
, unless provided with an explicit Clock, will use the default clock you provide:
There are also useful shortcut methods to use clocks in your tests, inspired by timecop:
freeze()
freezes time to a specific point in timetravelTo()
travels to anInstant
in time, but allows time to continue moving forward from theretravelBy()
travels in time by aDuration
, which may be forward (positive) or backward (negative)scale()
makes time move at a given pace
Freeze the time to a specific point
Travel to a specific point in time
Make time move at a given pace
As you can see, you can even combine travelTo()
and scale()
methods.
Be very careful to reset()
the DefaultClock after each of your tests! If you're using PHPUnit, a good place to do this is in the tearDown()
method.
Exceptions
The following exceptions can be thrown:
Brick\DateTime\DateTimeException
when an illegal operation is performedBrick\DateTime\Parser\DateTimeParseException
whenparse()
ing an invalid string representation
Doctrine mappings
You can use brick/date-time
types in your Doctrine entities using the brick/date-time-doctrine package.
Contributing
Before submitting a pull request, you can check the code using the following tools. Your CI build will fail if any of the following tools reports any issue.
First of all, install dependencies:
Unit tests
Run PHPUnit tests:
Static analysis
Install Psalm in its own folder:
Run Psalm static analysis:
Coding Style
Install Easy Coding Standard in its own folder:
Run coding style analysis checks:
Or fix issues found directly:
Rector automated refactoring
Install Rector in its own folder:
Run automated refactoring: