modifs.mineures sans commentaires

This commit is contained in:
Jephté Clain 2024-04-06 06:05:48 +04:00
parent c3ef659bfe
commit 5b549cdaf3
4 changed files with 61 additions and 33 deletions

View File

@ -1,6 +1,8 @@
<?php <?php
namespace nur\sery\php\time; namespace nur\sery\php\time;
use InvalidArgumentException;
class DateInterval extends \DateInterval { class DateInterval extends \DateInterval {
protected static function to_string(DateInterval $interval) { protected static function to_string(DateInterval $interval) {
$string = "P"; $string = "P";
@ -22,7 +24,7 @@ class DateInterval extends \DateInterval {
} }
function __construct($duration) { function __construct($duration) {
if ($duration instanceof DateInterval) { if ($duration instanceof \DateInterval) {
$this->y = $duration->y; $this->y = $duration->y;
$this->m = $duration->m; $this->m = $duration->m;
$this->d = $duration->d; $this->d = $duration->d;
@ -31,6 +33,8 @@ class DateInterval extends \DateInterval {
$this->s = $duration->s; $this->s = $duration->s;
$this->invert = $duration->invert; $this->invert = $duration->invert;
$this->days = $duration->days; $this->days = $duration->days;
} elseif (!is_string($duration)) {
throw new InvalidArgumentException("duration must be a string");
} else { } else {
if (substr($duration, 0, 1) == "-") { if (substr($duration, 0, 1) == "-") {
$duration = substr($duration, 1); $duration = substr($duration, 1);

View File

@ -8,16 +8,35 @@ use InvalidArgumentException;
/** /**
* Class DateTime: une date et une heure * Class DateTime: une date et une heure
* *
* @property-read string $year * @property-read int $year
* @property-read string $month * @property-read int $month
* @property-read string $day * @property-read int $day
* @property-read string $hour * @property-read int $hour
* @property-read string $minute * @property-read int $minute
* @property-read string $second * @property-read int $second
* @property-read int $wday
* @property-read int $wnum
* @property-read string $timezone * @property-read string $timezone
* @property-read string $datetime
* @property-read string $date
*/ */
class DateTime extends \DateTime { class DateTime extends \DateTime {
const DEFAULT_FORMAT = "d/m/Y H:i:s"; 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 { static function clone(DateTimeInterface $dateTime): self {
if ($dateTime instanceof static) return clone $dateTime; if ($dateTime instanceof static) return clone $dateTime;
@ -33,6 +52,9 @@ class DateTime extends \DateTime {
parent::__construct(); parent::__construct();
$this->setTimestamp($datetime->getTimestamp()); $this->setTimestamp($datetime->getTimestamp());
$this->setTimezone($timezone); $this->setTimezone($timezone);
} elseif (is_int($datetime)) {
parent::__construct();
$this->setTimestamp($datetime);
} else { } else {
parent::__construct($datetime, $timezone); parent::__construct($datetime, $timezone);
} }
@ -51,15 +73,11 @@ class DateTime extends \DateTime {
} }
function __get($name) { function __get($name) {
switch ($name) { if (array_key_exists($name, self::INT_FORMATS)) {
case "year": return $this->format("Y"); return intval($this->format(self::INT_FORMATS[$name]));
case "month": return $this->format("m"); } elseif (array_key_exists($name, self::STRING_FORMATS)) {
case "day": return $this->format("d"); return $this->format(self::STRING_FORMATS[$name]);
case "hour": return $this->format("H"); }
case "minute": return $this->format("i"); throw new InvalidArgumentException("Unknown property $name");
case "second": return $this->format("s");
case "timezone": return $this->format("P");
default: throw new InvalidArgumentException("Unknown property $name");
}
} }
} }

View File

@ -12,15 +12,19 @@ class DateTest extends TestCase {
function testDate() { function testDate() {
$date = self::dt("2024-04-05 09:15:23"); $date = self::dt("2024-04-05 09:15:23");
self::assertEquals("05/04/2024", $date->format()); self::assertSame("05/04/2024", $date->format());
self::assertEquals("05/04/2024", strval($date)); self::assertSame("05/04/2024", strval($date));
self::assertEquals("2024", $date->year); self::assertSame(2024, $date->year);
self::assertEquals("04", $date->month); self::assertSame(4, $date->month);
self::assertEquals("05", $date->day); self::assertSame(5, $date->day);
self::assertEquals("00", $date->hour); self::assertSame(0, $date->hour);
self::assertEquals("00", $date->minute); self::assertSame(0, $date->minute);
self::assertEquals("00", $date->second); self::assertSame(0, $date->second);
self::assertEquals("+04:00", $date->timezone); 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() { function testClone() {

View File

@ -2,8 +2,6 @@
namespace nur\sery\php\time; namespace nur\sery\php\time;
use DateTimeZone; use DateTimeZone;
use nur\sery\php\time\Date;
use nur\sery\php\time\DateTime;
use PHPUnit\Framework\TestCase; use PHPUnit\Framework\TestCase;
class DateTimeTest extends 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", $date->format());
self::assertEquals("05/04/2024 09:15:23", strval($date)); self::assertEquals("05/04/2024 09:15:23", strval($date));
self::assertEquals("2024", $date->year); self::assertSame(2024, $date->year);
self::assertEquals("04", $date->month); self::assertSame(4, $date->month);
self::assertEquals("05", $date->day); self::assertSame(5, $date->day);
self::assertEquals("09", $date->hour); self::assertSame(9, $date->hour);
self::assertEquals("15", $date->minute); self::assertSame(15, $date->minute);
self::assertEquals("23", $date->second); self::assertSame(23, $date->second);
self::assertSame(5, $date->wday);
self::assertSame(14, $date->wnum);
self::assertEquals("+04:00", $date->timezone); 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() { function testClone() {