modifs.mineures sans commentaires
This commit is contained in:
parent
c3ef659bfe
commit
5b549cdaf3
|
@ -1,6 +1,8 @@
|
|||
<?php
|
||||
namespace nur\sery\php\time;
|
||||
|
||||
use InvalidArgumentException;
|
||||
|
||||
class DateInterval extends \DateInterval {
|
||||
protected static function to_string(DateInterval $interval) {
|
||||
$string = "P";
|
||||
|
@ -22,7 +24,7 @@ class DateInterval extends \DateInterval {
|
|||
}
|
||||
|
||||
function __construct($duration) {
|
||||
if ($duration instanceof DateInterval) {
|
||||
if ($duration instanceof \DateInterval) {
|
||||
$this->y = $duration->y;
|
||||
$this->m = $duration->m;
|
||||
$this->d = $duration->d;
|
||||
|
@ -31,6 +33,8 @@ class DateInterval extends \DateInterval {
|
|||
$this->s = $duration->s;
|
||||
$this->invert = $duration->invert;
|
||||
$this->days = $duration->days;
|
||||
} elseif (!is_string($duration)) {
|
||||
throw new InvalidArgumentException("duration must be a string");
|
||||
} else {
|
||||
if (substr($duration, 0, 1) == "-") {
|
||||
$duration = substr($duration, 1);
|
||||
|
|
|
@ -8,16 +8,35 @@ use InvalidArgumentException;
|
|||
/**
|
||||
* Class DateTime: une date et une heure
|
||||
*
|
||||
* @property-read string $year
|
||||
* @property-read string $month
|
||||
* @property-read string $day
|
||||
* @property-read string $hour
|
||||
* @property-read string $minute
|
||||
* @property-read string $second
|
||||
* @property-read int $year
|
||||
* @property-read int $month
|
||||
* @property-read int $day
|
||||
* @property-read int $hour
|
||||
* @property-read int $minute
|
||||
* @property-read int $second
|
||||
* @property-read int $wday
|
||||
* @property-read int $wnum
|
||||
* @property-read string $timezone
|
||||
* @property-read string $datetime
|
||||
* @property-read string $date
|
||||
*/
|
||||
class DateTime extends \DateTime {
|
||||
const DEFAULT_FORMAT = "d/m/Y H:i:s";
|
||||
const INT_FORMATS = [
|
||||
"year" => "Y",
|
||||
"month" => "m",
|
||||
"day" => "d",
|
||||
"hour" => "H",
|
||||
"minute" => "i",
|
||||
"second" => "s",
|
||||
"wday" => "N",
|
||||
"wnum" => "W",
|
||||
];
|
||||
const STRING_FORMATS = [
|
||||
"timezone" => "P",
|
||||
"datetime" => "d/m/Y H:i:s",
|
||||
"date" => "d/m/Y",
|
||||
];
|
||||
|
||||
static function clone(DateTimeInterface $dateTime): self {
|
||||
if ($dateTime instanceof static) return clone $dateTime;
|
||||
|
@ -33,6 +52,9 @@ class DateTime extends \DateTime {
|
|||
parent::__construct();
|
||||
$this->setTimestamp($datetime->getTimestamp());
|
||||
$this->setTimezone($timezone);
|
||||
} elseif (is_int($datetime)) {
|
||||
parent::__construct();
|
||||
$this->setTimestamp($datetime);
|
||||
} else {
|
||||
parent::__construct($datetime, $timezone);
|
||||
}
|
||||
|
@ -51,15 +73,11 @@ class DateTime extends \DateTime {
|
|||
}
|
||||
|
||||
function __get($name) {
|
||||
switch ($name) {
|
||||
case "year": return $this->format("Y");
|
||||
case "month": return $this->format("m");
|
||||
case "day": return $this->format("d");
|
||||
case "hour": return $this->format("H");
|
||||
case "minute": return $this->format("i");
|
||||
case "second": return $this->format("s");
|
||||
case "timezone": return $this->format("P");
|
||||
default: throw new InvalidArgumentException("Unknown property $name");
|
||||
}
|
||||
if (array_key_exists($name, self::INT_FORMATS)) {
|
||||
return intval($this->format(self::INT_FORMATS[$name]));
|
||||
} elseif (array_key_exists($name, self::STRING_FORMATS)) {
|
||||
return $this->format(self::STRING_FORMATS[$name]);
|
||||
}
|
||||
throw new InvalidArgumentException("Unknown property $name");
|
||||
}
|
||||
}
|
||||
|
|
|
@ -12,15 +12,19 @@ class DateTest extends TestCase {
|
|||
function testDate() {
|
||||
$date = self::dt("2024-04-05 09:15:23");
|
||||
|
||||
self::assertEquals("05/04/2024", $date->format());
|
||||
self::assertEquals("05/04/2024", strval($date));
|
||||
self::assertEquals("2024", $date->year);
|
||||
self::assertEquals("04", $date->month);
|
||||
self::assertEquals("05", $date->day);
|
||||
self::assertEquals("00", $date->hour);
|
||||
self::assertEquals("00", $date->minute);
|
||||
self::assertEquals("00", $date->second);
|
||||
self::assertEquals("+04:00", $date->timezone);
|
||||
self::assertSame("05/04/2024", $date->format());
|
||||
self::assertSame("05/04/2024", strval($date));
|
||||
self::assertSame(2024, $date->year);
|
||||
self::assertSame(4, $date->month);
|
||||
self::assertSame(5, $date->day);
|
||||
self::assertSame(0, $date->hour);
|
||||
self::assertSame(0, $date->minute);
|
||||
self::assertSame(0, $date->second);
|
||||
self::assertSame(5, $date->wday);
|
||||
self::assertSame(14, $date->wnum);
|
||||
self::assertSame("+04:00", $date->timezone);
|
||||
self::assertSame("05/04/2024 00:00:00", $date->datetime);
|
||||
self::assertSame("05/04/2024", $date->date);
|
||||
}
|
||||
|
||||
function testClone() {
|
||||
|
|
|
@ -2,8 +2,6 @@
|
|||
namespace nur\sery\php\time;
|
||||
|
||||
use DateTimeZone;
|
||||
use nur\sery\php\time\Date;
|
||||
use nur\sery\php\time\DateTime;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
class DateTimeTest extends TestCase {
|
||||
|
@ -16,13 +14,17 @@ class DateTimeTest extends TestCase {
|
|||
|
||||
self::assertEquals("05/04/2024 09:15:23", $date->format());
|
||||
self::assertEquals("05/04/2024 09:15:23", strval($date));
|
||||
self::assertEquals("2024", $date->year);
|
||||
self::assertEquals("04", $date->month);
|
||||
self::assertEquals("05", $date->day);
|
||||
self::assertEquals("09", $date->hour);
|
||||
self::assertEquals("15", $date->minute);
|
||||
self::assertEquals("23", $date->second);
|
||||
self::assertSame(2024, $date->year);
|
||||
self::assertSame(4, $date->month);
|
||||
self::assertSame(5, $date->day);
|
||||
self::assertSame(9, $date->hour);
|
||||
self::assertSame(15, $date->minute);
|
||||
self::assertSame(23, $date->second);
|
||||
self::assertSame(5, $date->wday);
|
||||
self::assertSame(14, $date->wnum);
|
||||
self::assertEquals("+04:00", $date->timezone);
|
||||
self::assertSame("05/04/2024 09:15:23", $date->datetime);
|
||||
self::assertSame("05/04/2024", $date->date);
|
||||
}
|
||||
|
||||
function testClone() {
|
||||
|
|
Loading…
Reference in New Issue