PHP code example of geoffreyrose / useful-dates

1. Go to this page and download the library: Download geoffreyrose/useful-dates library. Choose the download type require.

2. Extract the ZIP file and open the index.php.

3. Add this code to the index.php.
    
        
<?php
require_once('vendor/autoload.php');

/* Start to develop here. Best regards https://php-download.com/ */

    

geoffreyrose / useful-dates example snippets


use UsefulDates\UsefulDates;
use Carbon\Carbon;

$usefulDates = new UsefulDates();
$usefulDates->setDate(Carbon::now());

// Add a simple date
$usefulDates->addDate(name: "Patrick Star's Birthday", date: Carbon::createFromFormat('Y-m-d', '1999-08-17'));

// Get upcoming dates
$dates = $usefulDates->getUsefulDatesInDays(30);

use UsefulDates\Facades\UsefulDates;

$usefulDates = UsefulDates::setDate(Carbon::now());



namespace App\Dates;

use Carbon\Carbon;
use UsefulDates\Abstracts\UsefulDateAbstract;
use UsefulDates\Enums\RepeatFrequency;

class AprilFools extends UsefulDateAbstract
{
    public function __construct()
    {
        $this->name = "April Fools' Day";
        $this->start_date = Carbon::createFromFormat('Y-m-d', '1582-04-01');
        $this->is_repeated = true;
        $this->repeat_frequency = RepeatFrequency::YEARLY;
    }

    public function date(): Carbon
    {
        return Carbon::createFromFormat('Y-m-d', "{$this->currentDate->year}-04-01");
    }
}

use UsefulDates\UsefulDates;
use Carbon\Carbon;

$usefulDates = new UsefulDates();
$usefulDates->setDate(Carbon::now());
$usefulDates->add(\App\Dates\AprilFools::class);

$nextDates = $usefulDates->getNextUsefulDates(5);
// Returns the next 5 occurrences of April Fools' Day

use UsefulDates\UsefulDates;
use Carbon\Carbon;

$usefulDates = new UsefulDates();
$usefulDates->setDate(Carbon::now());

// Strings and DateTime also work
$usefulDates->setDate('2025-02-01');
$usefulDates->setDate(new \DateTime('2025-03-01 08:00'));

$usefulDates->add(\App\Dates\AprilFools::class);

$usefulDates->addDate(
    name: "Patrick Star's Birthday",
    date: Carbon::createFromFormat('Y-m-d', '1999-08-17'),
);

$usefulDates->addExtension(\UsefulDatesUsHolidays\UsefulDatesUsHolidaysExtension::class);

$usefulDates->setDate(Carbon::now());
if ($usefulDates->isUsefulDate()) {
    // today matches a useful date
}

$someDate = Carbon::create(2025, 12, 25);
$isUseful = $usefulDates->isUsefulDate($someDate);

$dates = $usefulDates->getUsefulDate(Carbon::create(2025, 1, 1));
foreach ($dates as $date) {
    echo $date->name . ' occurs on ' . $date->usefulDate();
}

// Next 30 days from current context
$usefulDates->setDate(Carbon::now());
$next30 = $usefulDates->getUsefulDatesInDays(30);

// From a specific start date
$start = Carbon::create(2025, 1, 1);
$dates = $usefulDates->getUsefulDatesInDays(60, $start);

$usefulDates->setDate(Carbon::now());
$twoYears = $usefulDates->getUsefulDatesInYears(2);

$usefulDates->setDate(Carbon::now());
$next5 = $usefulDates->getNextUsefulDates(5);

$prev3 = $usefulDates->getPreviousUsefulDates(3);

$byYear = $usefulDates->getUsefulDatesByYear(2025);

$usefulDates->setBusinessDays([1, 2, 3, 4, 5]);
$usefulDates->isStandardBusinessDays(); // true

$usefulDates->setBusinessDays([1, 2, 3, 4, 6]); // Mon-Thu + Sat

$days = $usefulDates->getBusinessDays(); // [1, 2, 3, 4, 5]

$usefulDates->setDate(Carbon::create(2025, 5, 10)); // Saturday
$usefulDates->setBusinessDays([1, 2, 3, 4, 5]);
$usefulDates->isBusinessDay(); // false

$usefulDates->setDate(Carbon::create(2025, 5, 10)); // Saturday
$usefulDates->nextBusinessDay()->toDateString(); // "2025-05-12"

$usefulDates->setDate(Carbon::create(2025, 5, 10)); // Saturday
$usefulDates->prevBusinessDay()->toDateString(); // "2025-05-09"

$usefulDates->todayOrPreviousBusinessDay()->toDateString();

$usefulDates->todayOrNextBusinessDay()->toDateString();

use UsefulDates\UsefulDates;
use Carbon\Carbon;

$usefulDates = new UsefulDates();
$usefulDates->setDate(Carbon::create(2025, 1, 1));
$usefulDates->addDate("Patrick Star's Birthday", Carbon::createFromFormat('Y-m-d', '1999-08-17'));
$usefulDates->addDate('April Fools Day', Carbon::createFromFormat('Y-m-d', '1582-04-01'));

$dates = $usefulDates->getUsefulDatesInYears(10);
foreach ($dates as $date) {
    echo $date->name . ' - ' . $date->usefulDate()->toDateString() . ' (' . $date->daysAway() . ' days away)';
}

use UsefulDates\UsefulDates;
use Carbon\Carbon;

$usefulDates = new UsefulDates();
$usefulDates->setDate(Carbon::now());
$usefulDates->addExtension(\UsefulDatesUsHolidays\UsefulDatesUsHolidaysExtension::class);



namespace App\Extensions;

use App\Dates\AprilFools;
use UsefulDates\Abstracts\UsefulDatesExtensionAbstract;

class MyHolidays extends UsefulDatesExtensionAbstract
{
    public static string $name = 'My Holidays';
    public static string $description = 'Custom holiday collection';
    public static bool $hasMethods = true;

    // Return array of UsefulDate class names
    public static function usefulDates(): array
    {
        return [
            AprilFools::class,
        ];
    }
    
    // Optional: Add custom methods
    public function methods(): array
    {
        return [
            'isDecember' => [$this, 'isDecember'],
        ];
    }

    public function isDecember(): bool
    {
        return $this->usefulDates->date->month === 12;
    }
}

$usefulDates = new UsefulDates();
$usefulDates->setDate(Carbon::now()->addMonths(2));
$usefulDates->addExtension(\App\Extensions\MyHolidays::class);

if ($usefulDates->isDecember()) {
    echo "It's December!";
}



namespace App;

use UsefulDates\UsefulDates;
use UsefulDatesUsHolidays\UsefulDatesUsHolidaysExtension;
use Carbon\Carbon;

/**
 * @mixin UsefulDatesUsHolidaysExtension
 */
class MyUsefulDates extends UsefulDates
{
    public function init(Carbon $date): self
    {
        $this->setDate($date);
        $this->addExtension(UsefulDatesUsHolidaysExtension::class);
        return $this;
    }
}

$dates = new \App\MyUsefulDates();
$dates->init(Carbon::now());

use UsefulDates\UsefulDates;
use Carbon\Carbon;

$usefulDates = new UsefulDates();
$usefulDates->setDate(Carbon::now());
$usefulDates->addExtension(\UsefulDatesUsHolidays\UsHolidaysExtension::class);

// Get federal holidays established before 1900
$federalHolidays = $usefulDates->getUsefulDatesInDays(100, filters: [
    [
        'property' => 'is_federal_holiday',
        'operator' => '=',
        'value' => true,
    ],
    [
        'property' => 'federal_holiday_start_year',
        'operator' => '<=',
        'value' => 1900,
    ],
]);
bash
./vendor/bin/phpstan analyse src --memory-limit 2G