A standalone DateTime library originally based off of Carbon

Overview

CakePHP Chronos

Build Status Latest Stable Version Total Downloads Code Coverage Software License

Chronos aims to be a drop-in replacement for nesbot/carbon. It focuses on providing immutable date/datetime objects. Immutable objects help ensure that datetime objects aren't accidentally modified keeping data more predictable.

Installation

Installing with composer:

$ composer require cakephp/chronos

You can then use Chronos:

<?php
require 'vendor/autoload.php';

use Cake\Chronos\Chronos;

printf("Now: %s", Chronos::now());

Differences with nesbot/carbon

The biggest and main difference is that Chronos extends DateTimeImmutable instead of DateTime. Immutability for date values has proven to be a great way of avoiding bugs and reduce the amount of code, since developers don't have to manually copy the instance every time they need a change.

Another important feature it offers is the Date class, which is used for representing dates without time (calendar dates). Any time method called on this type of object is basically a no-op.

There are other implementation changes, but one that users might not notice is Chronos considers Monday as the start of the week instead of Sunday. This follows the ISO-8601 and current versions of PHP 5.6 and PHP 7.

A minor but still noticeable difference is that Chronos has no external dependencies, it is completely standalone.

Finally, Chronos is faster than Carbon as it has been optimized for the creation of hundreds of instances with minimal overhead.

Migrating from Carbon

First add cakephp/chronos to your composer.json:

php composer.phar require cakephp/chronos

By default Chronos includes a compatibility script that creates aliases for the relevant Carbon classes. This will let most applications upgrade with very little effort. If you'd like to permanently update your code, you will need to update imports and typehints. Assuming src contains the files you want to migrate, we could use the following to update files:

# Replace imports
find ./src -type f -name '*.php' -exec sed -i '' 's/use Carbon\\CarbonInterval/use Cake\\Chronos\\ChronosInterval/g' {} \;
find ./src -type f -name '*.php' -exec sed -i '' 's/use Carbon\\Carbon/use Cake\\Chronos\\Chronos/g' {} \;

# Replace typehints and extensions
find ./src -type f -name '*.php' -exec sed -i '' 's/CarbonInterval/ChronosInterval/g' {} \;
find ./src -type f -name '*.php' -exec sed -i '' 's/Carbon/Chronos/g' {} \;

At this point your code should mostly work as it did before. The biggest difference is that Chronos instances are immutable.

Immutable Object Changes

Immutable objects have a number of advantages:

  1. Using immutable objects is always free of side-effects.
  2. Dates and times don't accidentally change underneath other parts of your code.

With those benefits in mind, there are a few things you need to keep in mind when modifying immutable objects:

// This will lose modifications
$date = new Chronos('2015-10-21 16:29:00');
$date->modify('+2 hours');

// This will keep modifications
$date = new Chronos('2015-10-21 16:29:00');
$date = $date->modify('+2 hours');

Getting Mutable Objects

In the case that you need a mutable instance you can get one:

$time = new Chronos('2015-10-21 16:29:00');
$mutable = $time->toMutable();

$date = new Date('2015-10-21');
$mutable = $date->toMutable();

Converting Mutable Objects into Immutable ones.

If you have a mutable object and want an immutable variant you can do the following:

$time = new MutableDateTime('2015-10-21 16:29:00');
$fixed = $time->toImmutable();

$date = new MutableDate('2015-10-21');
$fixed = $date->toImmutable();

Calendar Dates

PHP only offers datetime objects as part of the native extensions. Chronos adds a number of conveniences to the traditional DateTime object and introduces a Date object. Date instances offer compatibility with the ChronosInterface, but have their time frozen to 00:00:00 and the timezone set to the server default timezone. This makes them ideal when working with calendar dates as the time components will always match.

use Cake\Chronos\Date;

$today = new Date();
echo $today;
// Outputs '2015-10-21'

echo $today->modify('+3 hours');
// Outputs '2015-10-21'

Like instances of Chronos, Date objects are also immutable. The MutableDate class provides a mutable variant of Date.

Documentation

A more descriptive documentation can be found at book.cakephp.org/chronos/2/en/.

API Documentation

API documentation can be found on api.cakephp.org/chronos.

Comments
  • Chronos issue suddenly appears

    Chronos issue suddenly appears

    From @chrisShick on April 25, 2016 20:44

    This is a (multiple allowed):

    • bug
    • CakePHP Version: Current Release.
    • Platform and Target: apache on xampp with php7

    What you did

    I have not done any php backend things yet. I have merely been styling the app before I get started on the back end.

    Expected Behavior

    Everything was working just fine and then suddenly I get this error: Fatal error: Class Cake\Chronos\Chronos contains 1 abstract method and must therefore be declared abstract or implement the remaining methods (DateTimeInterface::format) in C:\xampp\htdocs\vw\vendor\cakephp\chronos\src\Chronos.php on line 50

    Copied from original issue: cakephp/cakephp#8708

    Defect 
    opened by josegonzalez 57
  • Chronos\Date breaks DateTimeImmutable expected behaviour

    Chronos\Date breaks DateTimeImmutable expected behaviour

    As the author of the League\Period library, I tried to test the Chronos package against my library, which is a single PHP class, League\Period\Period. I'm having a issue which the fact that Chronos\Date object extends DateTimeImmutable object.

    The issue

    Here's a simple example:

    The Period object has a method called Period::split. This method enables exploding a Period object into smaller Period objects with a given duration. The method returns a PHP Generator.

    Using Chronos\Chronos, I get the expected behavior:

    use League\Period\Period;
    use Chronos\Chronos;
    
    $period = new Period(Chronos::yesterday(), Chronos::tomorrow());
    $res = $period->split(new DateInterval('PT12H'));
    foreach ($res as $innerPeriod) {
        //generate 4 small Period objects
        //whose datepoints are expressed as Chronos\Chronos objects
    }
    

    However, using Chronos\Date, I get an unexpected behavior:

    use League\Period\Period;
    use Chronos\Date;
    
    $period = new Period(Date::yesterday(), Date::tomorrow());
    $res = $period->split(new DateInterval('PT12H'));
    foreach ($res as $innerPeriod) {
        //an infinite loop is created
        //each time a Period object with the same datepoints expressed as Chronos\Date objects
        //is created since the time part are "frozen" 
    }
    

    The explanation

    The keep the Period class immutable it must work with DateTimeImmutable objects. When given a DateTimeImmutable object, the object will be used as is and won't be converted into a proper DateTimeImmutable object. This is to ease using extended DateTimeImmutable object like Chronos\Chronos.

    What to do ?

    I do understand the goal behind Chronos\Date but IMHO it should not extends DateTimeImmutable otherwise you end up with an object which claims to follow a known object behavior but yet act differently. Any code that relies on DateTimeImmutable will face the same issue as long as Chronos\Date extends DateTimeImmutable. Unless all third parties code are force to make a distinction between DateTimeImmutable and Chronos\Date objects which would be rather strange. This does not necessary require Chronos\Date to not follow the ChronosInterface

    bug 
    opened by nyamsprod 25
  • Chronos\ChronosInterface usefulness

    Chronos\ChronosInterface usefulness

    function doSomething(\Cake\Chronos\ChronosInterface $chronos)
    {
        return $chronos->year(2015);
    }
    

    If a Cake\Chronos\Chronos object is given to the function returns a new Cake\Chronos\Chronos because this object is immutable

    If a Cake\Chronos\MutableDateTime object is given to the function will modify the object and return a reference to it because it is mutable

    So you can not safely typehint against the Cake\Chronos\ChronosInterface and be safe regarding

    • the input being changed or not
    • the output being a new object or a reference to input

    This means that you should typehint against a concrete implementation which reduce the interface usefulness

    From a developer point this is a design issue. Of note, PHP's DateTimeInterface avoid this problem by only specifying methods which do not affect the object internal state.

    enhancement 
    opened by nyamsprod 20
  • DST handling while date modifying

    DST handling while date modifying

    Hello!

    What do you think about implement the same DST handling like i suggested in issue for Carbon?

    For example i have the date 2014-03-30 00:00:00 in Europe/London (new Carbon('2014-03-30 00:00:00, 'Europe/London')), then if i want to increase date by 1 day, i expect 2014-03-31 00:00:00, but if want to increase date by 24 hours, then i expect 2014-03-31 01:00:00, because in this timezone there will be that time after 24 hours (timezone offset changes because of Daylight correction). The same for minutes and seconds.

    As i see, in chronos:

    $date = new Chronos('2014-03-30 00:00:00', 'Europe/London');
    $date = $date->modify('+86400 sec');
    $this->assertSame('2014-03-31 01:00:00 +01:00', $date->format('Y-m-d H:i:s P'));
    
    // failed:
    // -2014-03-31 01:00:00 +01:00
    // +2014-03-31 00:00:00 +01:00
    

    If you agree with me i will write pull-request.

    enhancement 
    opened by Ovsyanka 16
  • Error: debugInfo must return an array

    Error: debugInfo must return an array

    Hello, there.

    While debugging with phpstorm and xdebug the behavior of a controller which uploads avatar images, I came across an error thrown by PHP: image

    I think that it's related to #129 which introduced the given method. It's a Symfony 4-based project and for dev environment, I'm using PHP 7.1.15 with Xdebug 2.6.0. Tried an composer update cakephp/chronos, but still fails.

    What can be done to fix the encountered issue?

    opened by hktr92 14
  • diffForHumans() gives misleading results for future dates

    diffForHumans() gives misleading results for future dates

    Consider the following example of a future date two weeks ahead of today's date:

    echo Chronos::parse(new DateTime('2 weeks'))->diffForHumans();

    1 week from now

    It seems to me the expected out put should be two weeks from now.

    Also consider that as the current time ticks forward, the diff should probably not flip from two weeks to one week, since this is not very granular output. That is, once the difference becomes less than two weeks, it should probably change scale to days, e.g. 11 days, 10 days, etc. If it jumps straight from two weeks to one week, when should this occur? One second prior to the full two weeks? Half way between one week and two weeks? Up to one second after one full week? This presents a boundary condition problem that is difficult to reason about if we do not switch to a more granular time output, e.g. from weeks to days.

    As an aside, the behaviour is not the same for past dates:

    echo Chronos::parse(new DateTime('-2 weeks'))->diffForHumans();

    2 weeks ago

    enhancement 
    opened by Bilge 13
  • Add __debugInfo()

    Add __debugInfo()

    Can we add __debugInfo() magic method for Chronos?

    Especially testNow makes it hard to read chronos instances.

    object(Cake\Chronos\Chronos) {
        date => '2017-02-10 14:22:51.195231'
        timezone_type => (int) 3
        timezone => 'UTC'
        [protected] toStringFormat => 'Y-m-d H:i:s'
        [protected] weekendDays => [
            (int) 0 => (int) 6,
            (int) 1 => (int) 7
        ]
        [protected] diffFormatter => null
        [protected] _lastErrors => []
        [protected] days => [
            (int) 1 => 'Monday',
            (int) 2 => 'Tuesday',
            (int) 3 => 'Wednesday',
            (int) 4 => 'Thursday',
            (int) 5 => 'Friday',
            (int) 6 => 'Saturday',
            (int) 7 => 'Sunday'
        ]
        [protected] weekStartsAt => (int) 1
        [protected] weekEndsAt => (int) 7
        [protected] relativePattern => '/this|next|last|tomorrow|yesterday|today|[+-]|first|last|ago/i'
        [protected] testNow => object(Cake\Chronos\Chronos) {
            date => '2017-02-10 14:22:51.195231'
            timezone_type => (int) 3
            timezone => 'UTC'
            [protected] toStringFormat => 'Y-m-d H:i:s'
            [protected] weekendDays => [
                (int) 0 => (int) 6,
                (int) 1 => (int) 7
            ]
            [protected] diffFormatter => null
            [protected] _lastErrors => []
            [protected] days => [
                (int) 1 => 'Monday',
                (int) 2 => 'Tuesday',
                (int) 3 => 'Wednesday',
                (int) 4 => 'Thursday',
                (int) 5 => 'Friday',
                (int) 6 => 'Saturday',
                (int) 7 => 'Sunday'
            ]
            [protected] weekStartsAt => (int) 1
            [protected] weekEndsAt => (int) 7
            [protected] relativePattern => '/this|next|last|tomorrow|yesterday|today|[+-]|first|last|ago/i'
            [protected] testNow => object(Cake\Chronos\Chronos) {
                //and so on and on...
            }
        }
    }
    
    enhancement 
    opened by robertpustulka 13
  • RFC - Add a Calendar date object

    RFC - Add a Calendar date object

    One of the issues we've heard a bunch of times with the ORM is that DATE columns are mapped to datetime instances. While we can't completely avoid that, we could make a 'calendar' date object. This object would differ from the datetime instance in a few ways:

    • The time methods would be removed or raise errors.
    • The time mutators would raise errors or not exist. Including the methods and raising exceptions lets us conform to the ChronosInterface which is nice.
    • On construction the time component would be set to 00:00:00.
    opened by markstory 12
  • Please add a Changelog.md or similar

    Please add a Changelog.md or similar

    It would be nice to have the changelog part of the sources.

    When receiving an update via composer, only the actual source files are changed but there's no included description as to why.

    The releases on github https://github.com/cakephp/chronos/releases do get proper description, so I think it would great if you would just include them here, too.

    Thanks!

    enhancement 
    opened by mfn 11
  • Multiple instance created if calling certain methods.

    Multiple instance created if calling certain methods.

    If calling isPast(), isToday(), isFuture() on a Chronos object, a new static of "now" is created on each method call in order to compare.
    I believe there must be a way to cache a "now" for reuse to avoid creating many unnecessary objects.

    enhancement 
    opened by votemike 11
  • Do not specialize zero in DifferenceFormatter

    Do not specialize zero in DifferenceFormatter

    Fixed that it was returned 1 second ago even if there is no difference. However, this modification affects the users of the library, so please consider it.

    Thanks.

    opened by serima 11
  • Fix up API method.

    Fix up API method.

    If we now fix up the API and method naming, I suggest renaming this as the current one, removes the acronym here. Is already a duplicate somewhat in naming anyway ("TimestampUTC" => TimestampUniversalTimeCoordinated)

    opened by dereuromark 10
  • Handle DateInterval Roll-Over

    Handle DateInterval Roll-Over

    It would be useful if there was a way to handle DateInterval Roll-Over. For example, I would hope that (ChronosInterval::seconds(107))->format('%I:%S') would output 01:47 rather than 00:107.

    enhancement 
    opened by votemike 7
  • Add Time class

    Add Time class

    Since you've already added a Date class without time components, would it make sense to include a Time class without date components (or fixed to 0000-01-01) with included Timezone support?

    enhancement 
    opened by psaintjust 14
Releases(3.0.0-beta1)
  • 3.0.0-beta1(Dec 19, 2022)

    Chronos 3.0 will be a major release that contains breaking changes. This beta release provides a preview release of what will be coming in the future and unblocks CakePHP 5.0 beta releases.

    Summary of Breaking changes

    • Removed Mutable datetime and date classes.
    • ChronosDate no longer implements DateTimeInterface and doesn't share types with Chronos either. This resolves a long standing interface compatibility issue where Date and DateTime objects appeared to be more type compatible than they should be.
    • Chronos no longer implements DateTimeInterface or extends DateTimeImmutable. Instead Chronos is a wrapper around PHP's datetime, and continues to offer a similar interface to the PHP objects.
    • Removed Carbon compatibility shims. While chronos started out as a fork of Carbon due to lack of maintainship, the Carbon project has new maintainers and we no longer need to encroach on that namespace.

    Upgrading

    In the future 2.4 will be released with deprecations to help with upgrading to chronos 3.x

    Source code(tar.gz)
    Source code(zip)
  • 2.3.2(Nov 8, 2022)

    What's Changed

    • Fix: Unexpected Human Interval Values by @MGatner in https://github.com/cakephp/chronos/pull/323
    • Switch human diff to months when interval is 2+ months by @othercorey in https://github.com/cakephp/chronos/pull/343

    Full Changelog: https://github.com/cakephp/chronos/compare/2.3.1...2.3.2

    Source code(tar.gz)
    Source code(zip)
  • 2.3.1(Oct 21, 2022)

  • 2.3.0(Oct 17, 2021)

  • 2.2.0(Jun 17, 2021)

    Changes

    • Support PHP 8.1
    • Suppress internal method tentative return type deprecations with ReturnTypeWillChange attribute. https://wiki.php.net/rfc/internal_method_return_types
    Source code(tar.gz)
    Source code(zip)
  • 2.1.2(Apr 7, 2021)

    Changes

    • Fixed missing integer timestamp support in Chronos + MutableDateTime constructors
    • Fixed comparing from wrong source timezone in diffInMonthIgnoreTimezone()
    Source code(tar.gz)
    Source code(zip)
  • 2.1.1(Feb 6, 2021)

  • 2.1.0(Jan 20, 2021)

    New Features

    • Added diffInMonthsIgnoreTimezone() that takes the difference without allowing PHP to convert back to UTC first. For example: 2019-06-01 Asia/Tokyo and 2019-10-01 Asia/Tokyo would return 4 instead of 3 that DateTime::diff() would return.
    Source code(tar.gz)
    Source code(zip)
  • 2.0.6(Aug 22, 2020)

  • 2.0.5(May 26, 2020)

    Fixed

    • Values in the Ymd format can now be parsed.
    • Fixed creating Chronos/MutableDateTime from existing instance.
    • Removed remaining HHVM references.
    Source code(tar.gz)
    Source code(zip)
  • 2.0.4(Apr 21, 2020)

  • 2.0.3(Feb 26, 2020)

  • 2.0.2(Feb 8, 2020)

    Changes

    • Updated dev dependencies to stable versions.
    • Removed duplicate content in README.
    • You can now new instances of Chronos, MutableDateTime, Date, MutableDate from other instances.
    Source code(tar.gz)
    Source code(zip)
  • 2.0.1(Dec 1, 2019)

  • 2.0.0(Nov 30, 2019)

    Breaking Changes

    • PHP 7.2 required.
    • Date and MutableDate now use server default time zone instead of UTC. This makes using Date objects easier for time zones that are far away from UTC as Date::today() will not be wrong as often.
    • Additional typehints added to methods.
    • addYears() no longer overflows months. For example adding (new Chronos('2012-02-29'))->addYears(1);Results in 2013-02-28 not 2013-03-01.

    New Features

    • Strict mode enabled for all files in chronos.
    • Add Chronos\DifferenceFormatterInterface.
    • Chronos::copy() returns a new instance now.
    • Date and MutableDate constructor now allow time zones to be passed in. This allows you to take dates from other time zones. The default time zone is used if not specified.
    • ChronosInterval now supports microseconds.
    • Added addYearsWithOverflow() to retain backwards compatibility with the previous behavior of addYears().
    • Added createFromArray() to ease creating instances from array data.
    Source code(tar.gz)
    Source code(zip)
  • 1.3.0(Nov 30, 2019)

    Added

    • createFromArray() was added to make creating instances from array based data.
    • Improved documentation and Japanese translation.

    Changes

    • Improved compatiblity with PHP 7.4
    • Shorthand comparison functions like gt() and eq() are now aliases for the long form methods greaterThan and equals(). In the future we may deprecate and remove the short forms in order to increase readability of the API.
    Source code(tar.gz)
    Source code(zip)
  • 1.2.8(Jun 17, 2019)

  • 1.2.7(Jun 11, 2019)

  • 1.2.6(May 30, 2019)

    • Documentation now included in this repository.
    • testNow() is now used when parsing relative datetimes that only supply the time component.
    Source code(tar.gz)
    Source code(zip)
  • 1.2.5(Apr 23, 2019)

  • 1.2.4(Feb 11, 2019)

  • 1.2.3(Oct 19, 2018)

  • 1.2.2(Jul 11, 2018)

  • 1.2.1(Jul 11, 2018)

  • 1.2.0(Jun 21, 2018)

    Changes

    • Tests are no longer run against HHVM
    • Improved API documentation
    • Setting time on a Date instance will now clear microseconds in when microseconds are offered by PHP.

    New Features

    • Test 'now' is shared across all classes. Changing 'now' in one class will update 'now' in all other classes.
    • ChronosInterval::__toString() now normalizes the period to match intervals used in standard clocks. Instead of 147S you will now get 2M27S as an example.
    Source code(tar.gz)
    Source code(zip)
  • 1.1.0(Feb 15, 2017)

  • 1.0.1(Nov 15, 2016)

  • 1.0.0(Aug 30, 2017)

  • 0.4.11(Jun 15, 2016)

  • 0.4.10(Jun 14, 2016)

Laravel package to convert AD to BS that can work with carbon.

Laravel Nepali Date Converter Laravel package to convert AD to BS that can work with carbon. Installation You can install the package via composer: co

DRH2SO4 19 Jan 5, 2023
A simple PHP API extension for DateTime.

Carbon An international PHP extension for DateTime. http://carbon.nesbot.com <?php use Carbon\Carbon; printf("Right now is %s", Carbon::now()->toDat

Brian Nesbitt 16k Dec 30, 2022
A fluent extension to PHPs DateTime class.

Expressive Date A fluent extension to PHPs DateTime class. Table of Contents Installation Composer Manually Laravel 4 Usage Getting Instances Quick He

Jason Lewis 258 Oct 9, 2021
Kimai v2 is a web-based multiuser time-tracking application.

Kimai is a free, open source and online time-tracking software designed for small businesses and freelancers. It is built with modern technologies such as Symfony, Bootstrap, RESTful API, Doctrine, AdminLTE, Webpack, ES6 etc.

Kevin Papst 2k Jan 6, 2023
TeamCal Neo is a web application of a day-based calendar

TeamCal Neo is a web application of a day-based calendar. It's generic purpose is the absence and event management of project teams, music bands and other groups needing a scheduler that focusses on days.

George Lewe 3 Nov 15, 2022
The easy PHP Library for calculating holidays

Introduction Yasumi (Japanese for 'Holiday'γ€ŒδΌ‘γΏγ€) is the easy PHP library that helps you retrieve the dates and names of holidays and other special cel

AzuyaLabs 926 Dec 29, 2022
The missing PHP 5.3+ calendar management library.

CalendR CalendR is an Object Oriented Calendar management library on top of PHP5.3+ Date objects. You can use it to deal with all your needs about cal

Yohan Giarelli 462 Dec 30, 2022
πŸ—“ A library to help you work with dates in multiple languages, based on Carbon.

Date This date library extends Carbon with multi-language support. Methods such as format, diffForHumans, parse, createFromFormat and the new timespan

Jens Segers 1.8k Dec 30, 2022
This library helps PHP users to convert and using Jalali DateTime format

Easy Jalali for PHP V1.0.0 Jalali calendar converter for Persian users in Iran, Afghanistan and other countries that use Jalali calendar. Very thanks

Majid J 3 Mar 20, 2022
Open Source PHP Framework (originally from EllisLab)

What is CodeIgniter CodeIgniter is an Application Development Framework - a toolkit - for people who build web sites using PHP. Its goal is to enable

B.C. Institute of Technology 18.2k Dec 29, 2022
Open Source PHP Framework (originally from EllisLab)

CodeIgniter 4 Development What is CodeIgniter? CodeIgniter is a PHP full-stack web framework that is light, fast, flexible and secure. More informatio

CodeIgniter 4 web framework 4.5k Jan 2, 2023
Updates the disabled link manager functionality in WordPress, originally designed as a blogroll, to act as a bookmarking system.

=== Bookmark Links === Contributors: dshanske Tags: links, bookmarks, readlater Requires at least: 4.7 Tested up to: 5.4 Stable tag: trunk Requires PH

David Shanske 7 Nov 16, 2022
laravel - Potion is a pure PHP asset manager for Laravel 5 based off of Assetic.

laravel-potion Potion is a pure PHP asset manager for Laravel based off of Assetic. Description Laravel 5 comes with a great asset manager called Elix

Matthew R. Miller 61 Mar 1, 2022
Laravel package to convert AD to BS that can work with carbon.

Laravel Nepali Date Converter Laravel package to convert AD to BS that can work with carbon. Installation You can install the package via composer: co

DRH2SO4 19 Jan 5, 2023
Wordpress wrapper to expose Carbon Fields to WpGraphQL queries.

WpGraphQLCrb A Wordpress wrapper to expose Carbon Fields to WpGraphQL queries. Important This is just the first version. There is a lot of work to be

Matheus Paiva 16 Aug 19, 2022
Carbon.IncludeAssetsCache Package for Neos CMS

Extend Carbon.IncludeAssets with an seperate cache entry for the included files. If a file changes, the cache gets flushed. This is useful if you have got dynamic CSS or JavaScript files on your server.

Carbon.Packages 2 Jan 18, 2022
A simple PHP API extension for DateTime.

Carbon An international PHP extension for DateTime. http://carbon.nesbot.com <?php use Carbon\Carbon; printf("Right now is %s", Carbon::now()->toDat

Brian Nesbitt 16k Dec 30, 2022
A fluent extension to PHPs DateTime class.

Expressive Date A fluent extension to PHPs DateTime class. Table of Contents Installation Composer Manually Laravel 4 Usage Getting Instances Quick He

Jason Lewis 258 Oct 9, 2021
Makes working with DateTime fields in Laravel's Nova easier

This package adds a DateTime field with support for a global DateTime format, syntactic sugar for formatting individual DateTime fields and powerful d

wdelfuego 6 Aug 4, 2022
The Popular Datetime, Flatpickr Picker as a Filament Form Field

Flatpickr Date/Time Picker as a Filament Field Flatpickr is one of the most popular js datepickers. This filament plugin allows you to use flatpickr a

Savannabits 4 Aug 29, 2022