add trashes
This commit is contained in:
@@ -0,0 +1,99 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/**
|
||||
* This file is part of CodeIgniter 4 framework.
|
||||
*
|
||||
* (c) CodeIgniter Foundation <admin@codeigniter.com>
|
||||
*
|
||||
* For the full copyright and license information, please view
|
||||
* the LICENSE file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace CodeIgniter\I18n\Exceptions;
|
||||
|
||||
use CodeIgniter\Exceptions\FrameworkException;
|
||||
|
||||
/**
|
||||
* I18nException
|
||||
*/
|
||||
class I18nException extends FrameworkException
|
||||
{
|
||||
/**
|
||||
* Thrown when createFromFormat fails to receive a valid
|
||||
* DateTime back from DateTime::createFromFormat.
|
||||
*
|
||||
* @return static
|
||||
*/
|
||||
public static function forInvalidFormat(string $format)
|
||||
{
|
||||
return new static(lang('Time.invalidFormat', [$format]));
|
||||
}
|
||||
|
||||
/**
|
||||
* Thrown when the numeric representation of the month falls
|
||||
* outside the range of allowed months.
|
||||
*
|
||||
* @return static
|
||||
*/
|
||||
public static function forInvalidMonth(string $month)
|
||||
{
|
||||
return new static(lang('Time.invalidMonth', [$month]));
|
||||
}
|
||||
|
||||
/**
|
||||
* Thrown when the supplied day falls outside the range
|
||||
* of allowed days.
|
||||
*
|
||||
* @return static
|
||||
*/
|
||||
public static function forInvalidDay(string $day)
|
||||
{
|
||||
return new static(lang('Time.invalidDay', [$day]));
|
||||
}
|
||||
|
||||
/**
|
||||
* Thrown when the day provided falls outside the allowed
|
||||
* last day for the given month.
|
||||
*
|
||||
* @return static
|
||||
*/
|
||||
public static function forInvalidOverDay(string $lastDay, string $day)
|
||||
{
|
||||
return new static(lang('Time.invalidOverDay', [$lastDay, $day]));
|
||||
}
|
||||
|
||||
/**
|
||||
* Thrown when the supplied hour falls outside the
|
||||
* range of allowed hours.
|
||||
*
|
||||
* @return static
|
||||
*/
|
||||
public static function forInvalidHour(string $hour)
|
||||
{
|
||||
return new static(lang('Time.invalidHour', [$hour]));
|
||||
}
|
||||
|
||||
/**
|
||||
* Thrown when the supplied minutes falls outside the
|
||||
* range of allowed minutes.
|
||||
*
|
||||
* @return static
|
||||
*/
|
||||
public static function forInvalidMinutes(string $minutes)
|
||||
{
|
||||
return new static(lang('Time.invalidMinutes', [$minutes]));
|
||||
}
|
||||
|
||||
/**
|
||||
* Thrown when the supplied seconds falls outside the
|
||||
* range of allowed seconds.
|
||||
*
|
||||
* @return static
|
||||
*/
|
||||
public static function forInvalidSeconds(string $seconds)
|
||||
{
|
||||
return new static(lang('Time.invalidSeconds', [$seconds]));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/**
|
||||
* This file is part of CodeIgniter 4 framework.
|
||||
*
|
||||
* (c) CodeIgniter Foundation <admin@codeigniter.com>
|
||||
*
|
||||
* For the full copyright and license information, please view
|
||||
* the LICENSE file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace CodeIgniter\I18n;
|
||||
|
||||
use DateTimeImmutable;
|
||||
use Stringable;
|
||||
|
||||
/**
|
||||
* A localized date/time package inspired
|
||||
* by Nesbot/Carbon and CakePHP/Chronos.
|
||||
*
|
||||
* Requires the intl PHP extension.
|
||||
*
|
||||
* @property-read int $age
|
||||
* @property-read string $day
|
||||
* @property-read string $dayOfWeek
|
||||
* @property-read string $dayOfYear
|
||||
* @property-read bool $dst
|
||||
* @property-read string $hour
|
||||
* @property-read bool $local
|
||||
* @property-read string $minute
|
||||
* @property-read string $month
|
||||
* @property-read string $quarter
|
||||
* @property-read string $second
|
||||
* @property-read int $timestamp
|
||||
* @property-read bool $utc
|
||||
* @property-read string $weekOfMonth
|
||||
* @property-read string $weekOfYear
|
||||
* @property-read string $year
|
||||
*
|
||||
* @phpstan-consistent-constructor
|
||||
*
|
||||
* @see \CodeIgniter\I18n\TimeTest
|
||||
*/
|
||||
class Time extends DateTimeImmutable implements Stringable
|
||||
{
|
||||
use TimeTrait;
|
||||
}
|
||||
@@ -0,0 +1,312 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/**
|
||||
* This file is part of CodeIgniter 4 framework.
|
||||
*
|
||||
* (c) CodeIgniter Foundation <admin@codeigniter.com>
|
||||
*
|
||||
* For the full copyright and license information, please view
|
||||
* the LICENSE file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace CodeIgniter\I18n;
|
||||
|
||||
use DateTime;
|
||||
use IntlCalendar;
|
||||
|
||||
/**
|
||||
* @property-read float|int $days
|
||||
* @property-read float|int $hours
|
||||
* @property-read float|int $minutes
|
||||
* @property-read float|int $months
|
||||
* @property-read int $seconds
|
||||
* @property-read float|int $weeks
|
||||
* @property-read float|int $years
|
||||
*
|
||||
* @see \CodeIgniter\I18n\TimeDifferenceTest
|
||||
*/
|
||||
class TimeDifference
|
||||
{
|
||||
/**
|
||||
* The timestamp of the "current" time.
|
||||
*
|
||||
* @var IntlCalendar
|
||||
*/
|
||||
protected $currentTime;
|
||||
|
||||
/**
|
||||
* The timestamp to compare the current time to.
|
||||
*
|
||||
* @var float
|
||||
*/
|
||||
protected $testTime;
|
||||
|
||||
/**
|
||||
* Eras.
|
||||
*
|
||||
* @var float
|
||||
*/
|
||||
protected $eras = 0;
|
||||
|
||||
/**
|
||||
* Years.
|
||||
*
|
||||
* @var float
|
||||
*/
|
||||
protected $years = 0;
|
||||
|
||||
/**
|
||||
* Months.
|
||||
*
|
||||
* @var float
|
||||
*/
|
||||
protected $months = 0;
|
||||
|
||||
/**
|
||||
* Weeks.
|
||||
*
|
||||
* @var int
|
||||
*/
|
||||
protected $weeks = 0;
|
||||
|
||||
/**
|
||||
* Days.
|
||||
*
|
||||
* @var int
|
||||
*/
|
||||
protected $days = 0;
|
||||
|
||||
/**
|
||||
* Hours.
|
||||
*
|
||||
* @var int
|
||||
*/
|
||||
protected $hours = 0;
|
||||
|
||||
/**
|
||||
* Minutes.
|
||||
*
|
||||
* @var int
|
||||
*/
|
||||
protected $minutes = 0;
|
||||
|
||||
/**
|
||||
* Seconds.
|
||||
*
|
||||
* @var int
|
||||
*/
|
||||
protected $seconds = 0;
|
||||
|
||||
/**
|
||||
* Difference in seconds.
|
||||
*
|
||||
* @var int
|
||||
*/
|
||||
protected $difference;
|
||||
|
||||
/**
|
||||
* Note: both parameters are required to be in the same timezone. No timezone
|
||||
* shifting is done internally.
|
||||
*/
|
||||
public function __construct(DateTime $currentTime, DateTime $testTime)
|
||||
{
|
||||
$this->difference = $currentTime->getTimestamp() - $testTime->getTimestamp();
|
||||
|
||||
$current = IntlCalendar::fromDateTime($currentTime);
|
||||
$time = IntlCalendar::fromDateTime($testTime)->getTime();
|
||||
|
||||
$this->currentTime = $current;
|
||||
$this->testTime = $time;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the number of years of difference between the two.
|
||||
*
|
||||
* @return float|int
|
||||
*/
|
||||
public function getYears(bool $raw = false)
|
||||
{
|
||||
if ($raw) {
|
||||
return $this->difference / YEAR;
|
||||
}
|
||||
|
||||
$time = clone $this->currentTime;
|
||||
|
||||
return $time->fieldDifference($this->testTime, IntlCalendar::FIELD_YEAR);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the number of months difference between the two dates.
|
||||
*
|
||||
* @return float|int
|
||||
*/
|
||||
public function getMonths(bool $raw = false)
|
||||
{
|
||||
if ($raw) {
|
||||
return $this->difference / MONTH;
|
||||
}
|
||||
|
||||
$time = clone $this->currentTime;
|
||||
|
||||
return $time->fieldDifference($this->testTime, IntlCalendar::FIELD_MONTH);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the number of weeks difference between the two dates.
|
||||
*
|
||||
* @return float|int
|
||||
*/
|
||||
public function getWeeks(bool $raw = false)
|
||||
{
|
||||
if ($raw) {
|
||||
return $this->difference / WEEK;
|
||||
}
|
||||
|
||||
$time = clone $this->currentTime;
|
||||
|
||||
return (int) ($time->fieldDifference($this->testTime, IntlCalendar::FIELD_DAY_OF_YEAR) / 7);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the number of days difference between the two dates.
|
||||
*
|
||||
* @return float|int
|
||||
*/
|
||||
public function getDays(bool $raw = false)
|
||||
{
|
||||
if ($raw) {
|
||||
return $this->difference / DAY;
|
||||
}
|
||||
|
||||
$time = clone $this->currentTime;
|
||||
|
||||
return $time->fieldDifference($this->testTime, IntlCalendar::FIELD_DAY_OF_YEAR);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the number of hours difference between the two dates.
|
||||
*
|
||||
* @return float|int
|
||||
*/
|
||||
public function getHours(bool $raw = false)
|
||||
{
|
||||
if ($raw) {
|
||||
return $this->difference / HOUR;
|
||||
}
|
||||
|
||||
$time = clone $this->currentTime;
|
||||
|
||||
return $time->fieldDifference($this->testTime, IntlCalendar::FIELD_HOUR_OF_DAY);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the number of minutes difference between the two dates.
|
||||
*
|
||||
* @return float|int
|
||||
*/
|
||||
public function getMinutes(bool $raw = false)
|
||||
{
|
||||
if ($raw) {
|
||||
return $this->difference / MINUTE;
|
||||
}
|
||||
|
||||
$time = clone $this->currentTime;
|
||||
|
||||
return $time->fieldDifference($this->testTime, IntlCalendar::FIELD_MINUTE);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the number of seconds difference between the two dates.
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
public function getSeconds(bool $raw = false)
|
||||
{
|
||||
if ($raw) {
|
||||
return $this->difference;
|
||||
}
|
||||
|
||||
$time = clone $this->currentTime;
|
||||
|
||||
return $time->fieldDifference($this->testTime, IntlCalendar::FIELD_SECOND);
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert the time to human readable format
|
||||
*/
|
||||
public function humanize(?string $locale = null): string
|
||||
{
|
||||
$current = clone $this->currentTime;
|
||||
|
||||
$years = $current->fieldDifference($this->testTime, IntlCalendar::FIELD_YEAR);
|
||||
$months = $current->fieldDifference($this->testTime, IntlCalendar::FIELD_MONTH);
|
||||
$days = $current->fieldDifference($this->testTime, IntlCalendar::FIELD_DAY_OF_YEAR);
|
||||
$hours = $current->fieldDifference($this->testTime, IntlCalendar::FIELD_HOUR_OF_DAY);
|
||||
$minutes = $current->fieldDifference($this->testTime, IntlCalendar::FIELD_MINUTE);
|
||||
|
||||
$phrase = null;
|
||||
|
||||
if ($years !== 0) {
|
||||
$phrase = lang('Time.years', [abs($years)], $locale);
|
||||
$before = $years < 0;
|
||||
} elseif ($months !== 0) {
|
||||
$phrase = lang('Time.months', [abs($months)], $locale);
|
||||
$before = $months < 0;
|
||||
} elseif ($days !== 0 && (abs($days) >= 7)) {
|
||||
$weeks = ceil($days / 7);
|
||||
$phrase = lang('Time.weeks', [abs($weeks)], $locale);
|
||||
$before = $days < 0;
|
||||
} elseif ($days !== 0) {
|
||||
$phrase = lang('Time.days', [abs($days)], $locale);
|
||||
$before = $days < 0;
|
||||
} elseif ($hours !== 0) {
|
||||
$phrase = lang('Time.hours', [abs($hours)], $locale);
|
||||
$before = $hours < 0;
|
||||
} elseif ($minutes !== 0) {
|
||||
$phrase = lang('Time.minutes', [abs($minutes)], $locale);
|
||||
$before = $minutes < 0;
|
||||
} else {
|
||||
return lang('Time.now', [], $locale);
|
||||
}
|
||||
|
||||
return $before
|
||||
? lang('Time.ago', [$phrase], $locale)
|
||||
: lang('Time.inFuture', [$phrase], $locale);
|
||||
}
|
||||
|
||||
/**
|
||||
* Allow property-like access to our calculated values.
|
||||
*
|
||||
* @param string $name
|
||||
*
|
||||
* @return float|int|null
|
||||
*/
|
||||
public function __get($name)
|
||||
{
|
||||
$name = ucfirst(strtolower($name));
|
||||
$method = "get{$name}";
|
||||
|
||||
if (method_exists($this, $method)) {
|
||||
return $this->{$method}();
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Allow property-like checking for our calculated values.
|
||||
*
|
||||
* @param string $name
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function __isset($name)
|
||||
{
|
||||
$name = ucfirst(strtolower($name));
|
||||
$method = "get{$name}";
|
||||
|
||||
return method_exists($this, $method);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,69 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/**
|
||||
* This file is part of CodeIgniter 4 framework.
|
||||
*
|
||||
* (c) CodeIgniter Foundation <admin@codeigniter.com>
|
||||
*
|
||||
* For the full copyright and license information, please view
|
||||
* the LICENSE file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace CodeIgniter\I18n;
|
||||
|
||||
use DateTime;
|
||||
use Exception;
|
||||
use ReturnTypeWillChange;
|
||||
|
||||
/**
|
||||
* Legacy Time class.
|
||||
*
|
||||
* This class is only for backward compatibility. Do not use.
|
||||
* This is not immutable! Some methods are immutable,
|
||||
* but some methods can alter the state.
|
||||
*
|
||||
* @property int $age read-only
|
||||
* @property string $day read-only
|
||||
* @property string $dayOfWeek read-only
|
||||
* @property string $dayOfYear read-only
|
||||
* @property bool $dst read-only
|
||||
* @property string $hour read-only
|
||||
* @property bool $local read-only
|
||||
* @property string $minute read-only
|
||||
* @property string $month read-only
|
||||
* @property string $quarter read-only
|
||||
* @property string $second read-only
|
||||
* @property int $timestamp read-only
|
||||
* @property bool $utc read-only
|
||||
* @property string $weekOfMonth read-only
|
||||
* @property string $weekOfYear read-only
|
||||
* @property string $year read-only
|
||||
*
|
||||
* @phpstan-consistent-constructor
|
||||
*
|
||||
* @deprecated Use Time instead.
|
||||
* @see \CodeIgniter\I18n\TimeLegacyTest
|
||||
*/
|
||||
class TimeLegacy extends DateTime
|
||||
{
|
||||
use TimeTrait;
|
||||
|
||||
/**
|
||||
* Returns a new instance with the date set to the new timestamp.
|
||||
*
|
||||
* @param int $timestamp
|
||||
*
|
||||
* @return static
|
||||
*
|
||||
* @throws Exception
|
||||
*/
|
||||
#[ReturnTypeWillChange]
|
||||
public function setTimestamp($timestamp)
|
||||
{
|
||||
$time = date('Y-m-d H:i:s', $timestamp);
|
||||
|
||||
return static::parse($time, $this->timezone, $this->locale);
|
||||
}
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user