如何比较 PHP 中的两个 ISO 8061 持续时间?
How can I compare two ISO 8061 durations in PHP?
我有两个 ISO 8061 持续时间,PT11M41S
和 PT49M13S
。我如何比较它们? (我需要一个布尔值来指示第一个持续时间是否比第二个持续时间长。)
您可以使用 PHP DateTime 对象非常简单地做到这一点
<?php
$t1 = 'PT11M41S';
$t2 = 'PT49M13S';
$d1 = new DateTime();
$d2 = new DateTime();
$d1->add(new DateInterval($t1));
$d2->add(new DateInterval($t2));
$diff = $d1 > $d2 ? true : false;
echo $diff ? 'TRUE' : 'FALSE';
我在这里看到了一个非常好的答案,但我只想补充一点,有很多方法可以实现这个 properly.For 示例:
class ExDateInterval extends DateInterval{
public function toSeconds($daysInMonth=30){
$daysInMonth=!is_int($daysInMonth)||$daysInMonth>31||$daysInMonth<28?30:$daysInMonth;
$interval=$this->y*31536000+$this->d*86400+$this->h*3600+$this->i*60+$this->s+$this->m*$daysInMonth*86400;
return $interval;
}
}
$t1='PT11M41S';
$t2='PT49M13S';
$interval1=new ExDateInterval($t1);
$interval2=new ExDateInterval($t2);
var_dump($interval1->toSeconds()>$interval2->toSeconds());//output false
var_dump($interval1->toSeconds()===$interval2->toSeconds());//output false
var_dump($interval1->toSeconds()<$interval2->toSeconds());//output true
我有两个 ISO 8061 持续时间,PT11M41S
和 PT49M13S
。我如何比较它们? (我需要一个布尔值来指示第一个持续时间是否比第二个持续时间长。)
您可以使用 PHP DateTime 对象非常简单地做到这一点
<?php
$t1 = 'PT11M41S';
$t2 = 'PT49M13S';
$d1 = new DateTime();
$d2 = new DateTime();
$d1->add(new DateInterval($t1));
$d2->add(new DateInterval($t2));
$diff = $d1 > $d2 ? true : false;
echo $diff ? 'TRUE' : 'FALSE';
我在这里看到了一个非常好的答案,但我只想补充一点,有很多方法可以实现这个 properly.For 示例:
class ExDateInterval extends DateInterval{
public function toSeconds($daysInMonth=30){
$daysInMonth=!is_int($daysInMonth)||$daysInMonth>31||$daysInMonth<28?30:$daysInMonth;
$interval=$this->y*31536000+$this->d*86400+$this->h*3600+$this->i*60+$this->s+$this->m*$daysInMonth*86400;
return $interval;
}
}
$t1='PT11M41S';
$t2='PT49M13S';
$interval1=new ExDateInterval($t1);
$interval2=new ExDateInterval($t2);
var_dump($interval1->toSeconds()>$interval2->toSeconds());//output false
var_dump($interval1->toSeconds()===$interval2->toSeconds());//output false
var_dump($interval1->toSeconds()<$interval2->toSeconds());//output true