- Splitted Datetime and added Immutable versions too
This commit is contained in:
parent
13b7cf06f1
commit
e5a842a812
8
src/Entity/Field/DateImmutable.php
Normal file
8
src/Entity/Field/DateImmutable.php
Normal file
@ -0,0 +1,8 @@
|
||||
<?php
|
||||
|
||||
namespace Ulmus\Entity\Field;
|
||||
|
||||
class Date extends DatetimeImmutable {
|
||||
|
||||
public string $format = "Y-m-d";
|
||||
}
|
||||
@ -5,66 +5,6 @@ namespace Ulmus\Entity\Field;
|
||||
use Ulmus\Entity\EntityObjectInterface;
|
||||
|
||||
class Datetime extends \DateTime implements EntityObjectInterface, \JsonSerializable {
|
||||
|
||||
public string $format = "Y-m-d H:i:s";
|
||||
|
||||
public function load(mixed ...$arguments)
|
||||
{
|
||||
$value = $arguments[0];
|
||||
|
||||
try {
|
||||
# From Timestamp
|
||||
if ( is_numeric($value) ) {
|
||||
$obj = new static("@$value");
|
||||
}
|
||||
else {
|
||||
$obj = new static($value);
|
||||
}
|
||||
}
|
||||
catch(\Throwable $ex) {
|
||||
throw new \Exception(sprintf("An error occured trying to instanciate from '%s'. %s", $value, $ex->getMessage()), $ex->getCode(), $ex);
|
||||
}
|
||||
|
||||
return $obj;
|
||||
}
|
||||
|
||||
public function setTime($hour, $minute, $second = 0, $microsecond = 0) : \DateTime
|
||||
{
|
||||
$fromParent = parent::setTime($hour, $minute, $second, $microsecond);
|
||||
|
||||
return new static($fromParent);
|
||||
}
|
||||
|
||||
public function save()
|
||||
{
|
||||
return $this->__toString();
|
||||
}
|
||||
|
||||
public function __toString()
|
||||
{
|
||||
return $this->format($this->format);
|
||||
}
|
||||
|
||||
#[\Deprecated]
|
||||
public function formatLocale(string $format) : string
|
||||
{
|
||||
return strftime($format, $this->getTimestamp());
|
||||
}
|
||||
|
||||
public function formatLocaleIntl(int $dateFormatter = \IntlDateFormatter::LONG, int $timeFormatter = \IntlDateFormatter::NONE, ? string $pattern = null) : string
|
||||
{
|
||||
$formatter = new \IntlDateFormatter(\Locale::getDefault(), $dateFormatter, $timeFormatter, \date_default_timezone_get(), \IntlDateFormatter::GREGORIAN, $pattern);
|
||||
|
||||
return $formatter->format($this->getTimestamp());
|
||||
}
|
||||
|
||||
public function ageAt(null|\DateTime $dateTime) : int
|
||||
{
|
||||
return (int) ( (int) ($dateTime ?: new DateTime())->format('Ymd') - (int) $this->format('Ymd') ) / 10000;
|
||||
}
|
||||
|
||||
public function jsonSerialize(): mixed
|
||||
{
|
||||
return $this;
|
||||
}
|
||||
use DatetimeTrait;
|
||||
}
|
||||
|
||||
|
||||
9
src/Entity/Field/DatetimeImmutable.php
Normal file
9
src/Entity/Field/DatetimeImmutable.php
Normal file
@ -0,0 +1,9 @@
|
||||
<?php
|
||||
|
||||
namespace Ulmus\Entity\Field;
|
||||
|
||||
use Ulmus\Entity\EntityObjectInterface;
|
||||
|
||||
class DatetimeImmutable extends \DateTimeImmutable implements EntityObjectInterface {
|
||||
use DatetimeTrait;
|
||||
}
|
||||
68
src/Entity/Field/DatetimeTrait.php
Normal file
68
src/Entity/Field/DatetimeTrait.php
Normal file
@ -0,0 +1,68 @@
|
||||
<?php
|
||||
|
||||
namespace Ulmus\Entity\Field;
|
||||
|
||||
trait DatetimeTrait
|
||||
{
|
||||
public string $format = "Y-m-d H:i:s";
|
||||
|
||||
public function load(mixed ...$arguments)
|
||||
{
|
||||
$value = $arguments[0];
|
||||
|
||||
try {
|
||||
# From Timestamp
|
||||
if ( is_numeric($value) ) {
|
||||
$obj = new static("@$value");
|
||||
}
|
||||
else {
|
||||
$obj = new static($value);
|
||||
}
|
||||
}
|
||||
catch(\Throwable $ex) {
|
||||
throw new \Exception(sprintf("An error occured trying to instanciate from '%s'. %s", $value, $ex->getMessage()), $ex->getCode(), $ex);
|
||||
}
|
||||
|
||||
return $obj;
|
||||
}
|
||||
|
||||
public function setTime($hour, $minute, $second = 0, $microsecond = 0) : \DateTimeInterface
|
||||
{
|
||||
$fromParent = parent::setTime($hour, $minute, $second, $microsecond);
|
||||
|
||||
return new static($fromParent);
|
||||
}
|
||||
|
||||
public function save()
|
||||
{
|
||||
return $this->__toString();
|
||||
}
|
||||
|
||||
public function __toString()
|
||||
{
|
||||
return $this->format($this->format);
|
||||
}
|
||||
|
||||
#[\Deprecated]
|
||||
public function formatLocale(string $format) : string
|
||||
{
|
||||
return strftime($format, $this->getTimestamp());
|
||||
}
|
||||
|
||||
public function formatLocaleIntl(int $dateFormatter = \IntlDateFormatter::LONG, int $timeFormatter = \IntlDateFormatter::NONE, ? string $pattern = null) : string
|
||||
{
|
||||
$formatter = new \IntlDateFormatter(\Locale::getDefault(), $dateFormatter, $timeFormatter, \date_default_timezone_get(), \IntlDateFormatter::GREGORIAN, $pattern);
|
||||
|
||||
return $formatter->format($this->getTimestamp());
|
||||
}
|
||||
|
||||
public function ageAt(null|\DateTime $dateTime) : int
|
||||
{
|
||||
return (int) ( (int) ($dateTime ?: new DateTime())->format('Ymd') - (int) $this->format('Ymd') ) / 10000;
|
||||
}
|
||||
|
||||
public function jsonSerialize(): mixed
|
||||
{
|
||||
return $this;
|
||||
}
|
||||
}
|
||||
8
src/Entity/Field/TimeImmutable.php
Normal file
8
src/Entity/Field/TimeImmutable.php
Normal file
@ -0,0 +1,8 @@
|
||||
<?php
|
||||
|
||||
namespace Ulmus\Entity\Field;
|
||||
|
||||
class Time extends DatetimeImmutable {
|
||||
|
||||
public string $format = "H:i:s";
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user