. */ declare(strict_types=1); namespace Fisharebest\Webtrees; use Carbon\CarbonImmutable; use Fisharebest\Webtrees\Contracts\UserInterface; use function gregoriantojd; /** * A wrapper around CarbonImmutable dates. * * The future of nesbot/carbon seems uncertain. We can always swap it out * for carbondate/carbon, cake-php/chronos or some other datetime class. */ class Carbon extends CarbonImmutable { /** * We use julian days extensively, so a helper function to convert. */ public function julianDay(): int { $local = $this->local(); return gregoriantojd($local->month, $local->day, $local->year); } /** * Create a local timestamp for the current user. * * @return Carbon */ public function local(): Carbon { $timezone = Auth::user()->getPreference(UserInterface::PREF_TIME_ZONE, Site::getPreference('TIMEZONE')); // Changing locale does not create a new immutable object. $this->locale(I18N::locale()->code()); return $this->setTimezone($timezone); } }