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
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);

View File

@ -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");
}
}

View File

@ -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() {

View File

@ -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() {