Aeon is a collection of libraries that are better way to handle DateTime in php. It provides a clean object oriented interface that is fully immutable, focused on improving the developer experience and making the implicit, explicit.
composer require aeon-php/calendar
Fully immutable thanks to Psalm and PHPStan
<?php
use Aeon\Calendar\Gregorian\GregorianCalendar;
use Aeon\Calendar\TimeUnit;
$calendar = GregorianCalendar::UTC();
$calendar->currentYear()
->january()
->lastDay()
->noon()
->sub(TimeUnit::days(3));
<?php
use Aeon\Calendar\Gregorian\Day;
use Aeon\Calendar\Gregorian\GregorianCalendar;
use Aeon\Calendar\Gregorian\DateTime;
use Aeon\Calendar\Gregorian\Month;
use Aeon\Calendar\Gregorian\Time;
use Aeon\Calendar\Gregorian\TimeZone;
use Aeon\Calendar\Gregorian\Year;
$dateTime = GregorianCalendar::UTC()->now();
$dateTime = DateTime::fromString('2020-01-01 00:00:00 UTC');
$dateTime = DateTime::fromDateTime(
new DateTimeImmutable(
'2020-01-01 00:00:00',
new DateTimeZone('UTC')
)
);
$dateTime = new DateTime(
new Day(new Month(new Year(2020), 01), 01),
new Time(00, 00, 00, 0),
TimeZone::UTC()
);
$dateTime = DateTime::create(2020, 01, 01, 00, 00, 00, 0, 'UTC');
<?php
use Aeon\Calendar\Gregorian\GregorianCalendar;
use Aeon\Calendar\Gregorian\TimePeriod;
use Aeon\Calendar\TimeUnit;
$now = GregorianCalendar::UTC()->now();
$now->until($now->add(TimeUnit::days(7)))
->iterate(TimeUnit::day())
->each(function(TimePeriod $timePeriod) {
echo $timePeriod->start()
->day()
->format('Y-m-d H:i:s.uO') . "\n";
});
<?php
use Aeon\Calendar\Gregorian\DateTime;
use Aeon\Calendar\Gregorian\TimeEpoch;
require_once __DIR__ . '../vendor/autoload.php';
$dateTime = DateTime::fromString('2020-01-01 00:00:00 UTC');
$timestampUNIX = $dateTime->timestamp(TimeEpoch::UNIX());
$timestampUTC = $dateTime->timestamp(TimeEpoch::UTC());
$timestampGPS = $dateTime->timestamp(TimeEpoch::GPS());
$timestampTAI = $dateTime->timestamp(TimeEpoch::TAI());
<?php
use Aeon\Calendar\TimeUnit;
use Aeon\Retry\Execution;
use function Aeon\Retry\retry;
$result = retry(function (Execution $execution) {
$random = \random_int(1, 3);
if ($random === 2) {
throw new \RuntimeException('exception');
}
return $random;
}, 3, TimeUnit::seconds(3));