54 lines
1.4 KiB
PHP
54 lines
1.4 KiB
PHP
<?php
|
|
namespace nulib\php\time;
|
|
|
|
use InvalidArgumentException;
|
|
|
|
class DateInterval extends \DateInterval {
|
|
protected static function to_string(DateInterval $interval) {
|
|
$string = "P";
|
|
$y = $interval->y;
|
|
$m = $interval->m;
|
|
$d = $interval->d;
|
|
if ($y > 0) $string .= "${y}Y";
|
|
if ($m > 0) $string .= "${m}M";
|
|
if ($d > 0) $string .= "${d}D";
|
|
$string .= "T";
|
|
$h = $interval->h;
|
|
$i = $interval->i;
|
|
$s = $interval->s;
|
|
if ($h > 0) $string .= "${h}H";
|
|
if ($i > 0) $string .= "${i}M";
|
|
if ($s > 0 || $string == "PT") $string .= "${s}S";
|
|
if ($interval->invert == 1) $string = "-$string";
|
|
return $string;
|
|
}
|
|
|
|
function __construct($duration) {
|
|
if ($duration instanceof \DateInterval) {
|
|
$this->y = $duration->y;
|
|
$this->m = $duration->m;
|
|
$this->d = $duration->d;
|
|
$this->h = $duration->h;
|
|
$this->i = $duration->i;
|
|
$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);
|
|
$invert = true;
|
|
} else {
|
|
$invert = false;
|
|
}
|
|
parent::__construct($duration);
|
|
if ($invert) $this->invert = 1;
|
|
}
|
|
}
|
|
|
|
function __toString(): string {
|
|
return self::to_string($this);
|
|
}
|
|
}
|