【问题标题】:How can I compare two ISO 8061 durations in PHP?如何比较 PHP 中的两个 ISO 8061 持续时间?
【发布时间】:2018-09-01 13:20:46
【问题描述】:

我有两个 ISO 8061 持续时间,PT11M41SPT49M13S。我该如何比较它们? (我需要一个布尔值来指示第一个持续时间是否大于第二个持续时间。)

【问题讨论】:

  • 嗨,你有没有尝试过。如果您向我们展示一些代码,您将始终能从社区中得到更好的回应,它通过向我们提供您实际尝试做的事情的一些背景信息来帮助我们
  • 注意:如果您使用像月份这样的模糊单位,则可能无法进行可靠的比较,例如 P1M ~ P30D(结果不清楚!!!)。

标签: php compare duration iso


【解决方案1】:

您可以使用 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';

【讨论】:

  • 易如反掌 ;-)
  • :) 这是否意味着我得到了3.14159265359 upvotes @FunkFortyNiner
  • “pie”和“pi”是两种不同的动物;你知道的 ;-) 嗯......馅饼。
【解决方案2】:

我在这里看到了一个非常好的答案,但我只想补充一点,有很多方法可以正确地实现这一点。例如:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-17
    • 1970-01-01
    • 2019-02-27
    相关资源
    最近更新 更多