Common#

Date Object#

The Date object is immutable. Internally it only contains the set Julian day integer.

The Calendar class contains factories for the Gregorian calendar and DateTime interoperability.

Arithmetic#

You can add or subtract days:

<?php

use Arokettu\Date\Calendar;
use Arokettu\Date\Date;

$date = Calendar::parse('2012-12-21');

echo $date->add(100); // 2013-03-31, 100 days after the apocalypse
echo $date->subDays(100); // 2012-09-12 // = echo $date->add(-100);

$today = Date::today();

// days since the apocalypse :D
echo $today->sub($date); // 4085 as of Feb 27, 2024

Calendar Agnostic Methods#

Today#

Gets a current date for the default or specific time zone:

<?php

use Arokettu\Date\Date;

echo Date::today(); // current system date
echo Date::today(new DateTimeZone('Asia/Tokyo')); // current date in Tokyo

WeekDay#

Week day can be retrieved as an instance of the WeekDay enum or as a number (1 = Monday, 7 = Sunday):

<?php

use Arokettu\Date\Date;

$date = Date::today();
$date->getWeekDay(); // like WeekDay::Tuesday
$date->getWeekDayNumber(); // 2 == WeekDay::Tuesday->value

DateTime Interoperability#

Import/Export date from DateTime objects.

Import#

Create an instance of Date from an instance of DateTimeInterface or by using DateTime’s own parser:

<?php

use Arokettu\Date\Calendar;

$dt = new DateTime('Feb 28, 2024');
$date = Calendar::fromDateTime($dt);
// or
$date = Calendar::parseDateTimeString('Feb 28, 2024');
// or any other expression DateTime supports:
$date = Calendar::parseDateTimeString('tomorrow');
// including iso week date:
$date = Calendar::parseDateTimeString('2021-W36-7');

Export#

Get a DateTimeImmutable object corresponding to midnight at a given date in a default or a specified time zone:

<?php

$date->toDateTime(); // timestamp at given date midnight system time
$date->toDateTime(new DateTimeZone('Asia/Tokyo')); // timestamp at given date midnight Tokyo

Also a formatter shortcut is available:

<?php

$date->formatDateTime('m/d/y');
// equivalent to
$date->getDateTime()->format('m/d/y');

// note that it can handle ISO week date too:
$date->formatDateTime('o-\\WW-N');