fixed failing tests for time values
This commit is contained in:
parent
1a12390c71
commit
7e87f6d618
6 changed files with 25 additions and 24 deletions
|
@ -4,9 +4,6 @@ namespace ByJoby\HTML\Html5\InlineTextSemantics;
|
||||||
|
|
||||||
use ByJoby\HTML\Html5\InlineTextSemantics\TimeTag\DatetimeValue;
|
use ByJoby\HTML\Html5\InlineTextSemantics\TimeTag\DatetimeValue;
|
||||||
use ByJoby\HTML\Tags\AbstractContainerTag;
|
use ByJoby\HTML\Tags\AbstractContainerTag;
|
||||||
use DateInterval;
|
|
||||||
use DateTimeInterface;
|
|
||||||
use Stringable;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The <time> HTML element represents a specific period in time. It may include
|
* The <time> HTML element represents a specific period in time. It may include
|
||||||
|
|
|
@ -55,7 +55,7 @@ abstract class DatetimeValue implements StringableValue
|
||||||
* Matches any integer from 00 to 59, leading zero optional. Optionally
|
* Matches any integer from 00 to 59, leading zero optional. Optionally
|
||||||
* followed by a three-digit decimal portion.
|
* followed by a three-digit decimal portion.
|
||||||
*/
|
*/
|
||||||
const REGEX_SECOND = '((?<second>0?[0-9]|[1-5][0-9])(\.(?<microsecond>[0-9]{3}))?)';
|
const REGEX_SECOND = '((?<second>0?[0-9]|[1-5][0-9])(\.(?<millisecond>[0-9]{3}))?)';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tries parsing with all subclasses and returns the first one that
|
* Tries parsing with all subclasses and returns the first one that
|
||||||
|
|
|
@ -14,9 +14,6 @@ use Stringable;
|
||||||
*/
|
*/
|
||||||
class DatetimeValue_datetime_local extends DatetimeValue
|
class DatetimeValue_datetime_local extends DatetimeValue
|
||||||
{
|
{
|
||||||
/** @var DateTime */
|
|
||||||
public $datetime;
|
|
||||||
|
|
||||||
public static function fromString(string|Stringable|null $string): null|self
|
public static function fromString(string|Stringable|null $string): null|self
|
||||||
{
|
{
|
||||||
// null string returns null
|
// null string returns null
|
||||||
|
@ -38,24 +35,26 @@ class DatetimeValue_datetime_local extends DatetimeValue
|
||||||
)
|
)
|
||||||
) {
|
) {
|
||||||
return new self(
|
return new self(
|
||||||
intval($matches['year']),
|
(new DateTime())
|
||||||
intval($matches['month']),
|
->setDate(
|
||||||
intval($matches['day']),
|
intval($matches['year']),
|
||||||
intval($matches['hour']),
|
intval($matches['month']),
|
||||||
intval($matches['minute']),
|
intval($matches['day'])
|
||||||
intval(@$matches['second']),
|
)
|
||||||
intval(@$matches['millisecond'])
|
->setTime(
|
||||||
|
intval($matches['hour']),
|
||||||
|
intval($matches['minute']),
|
||||||
|
intval(@$matches['second']),
|
||||||
|
intval(@$matches['millisecond']) * 1000
|
||||||
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
// return null if nothing found
|
// return null if nothing found
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function __construct(int $year, int $month, int $day, int $hour, int $minute, int $second = 0, int $millisecond = 0)
|
public function __construct(public DateTime $datetime)
|
||||||
{
|
{
|
||||||
$this->datetime = (new DateTime())
|
|
||||||
->setDate($year, $month, $day)
|
|
||||||
->setTime($hour, $minute, $second, $millisecond * 1000);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function __toString()
|
public function __toString()
|
||||||
|
|
|
@ -37,7 +37,7 @@ class DatetimeValue_time extends DatetimeValue
|
||||||
intval($matches['hour']),
|
intval($matches['hour']),
|
||||||
intval($matches['minute']),
|
intval($matches['minute']),
|
||||||
intval(@$matches['second']),
|
intval(@$matches['second']),
|
||||||
intval(@$matches['microsecond'])
|
intval(@$matches['millisecond'])
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
// return null if nothing found
|
// return null if nothing found
|
||||||
|
@ -47,7 +47,12 @@ class DatetimeValue_time extends DatetimeValue
|
||||||
public function __construct(int $hour, int $minute, int $second = 0, int $millisecond = 0)
|
public function __construct(int $hour, int $minute, int $second = 0, int $millisecond = 0)
|
||||||
{
|
{
|
||||||
$this->datetime = (new DateTime())
|
$this->datetime = (new DateTime())
|
||||||
->setTime($hour, $minute, $second, $millisecond*1000);
|
->setTime(
|
||||||
|
$hour,
|
||||||
|
$minute,
|
||||||
|
$second,
|
||||||
|
$millisecond * 1000
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function __toString()
|
public function __toString()
|
||||||
|
|
|
@ -41,7 +41,7 @@ class DatetimeValue_week extends DatetimeValue
|
||||||
public function __toString()
|
public function __toString()
|
||||||
{
|
{
|
||||||
return sprintf(
|
return sprintf(
|
||||||
'%s%04d-%02d',
|
'%s%04d-W%02d',
|
||||||
$this->year < 0 ? '-' : '',
|
$this->year < 0 ? '-' : '',
|
||||||
abs($this->year),
|
abs($this->year),
|
||||||
$this->week
|
$this->week
|
||||||
|
|
|
@ -26,10 +26,10 @@ class DatetimeValue_week_Test extends TestCase
|
||||||
DatetimeValue_week::fromString("99999-W53")
|
DatetimeValue_week::fromString("99999-W53")
|
||||||
?->__toString()
|
?->__toString()
|
||||||
);
|
);
|
||||||
// negative year
|
// negative year less than 4 digits
|
||||||
$this->assertEquals(
|
$this->assertEquals(
|
||||||
"-1500-06",
|
"-0150-W06",
|
||||||
DatetimeValue_week::fromString("-1500-06")
|
DatetimeValue_week::fromString("-0150-W06")
|
||||||
?->__toString()
|
?->__toString()
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue