2016-03-02 50 views
1

我从一些API得到一些数据,我得到一次在下列格式/什么样的时间格式是这样的

PT127M 
PT95M 

respectively.I要从此获得127这意味着127分钟,95分钟默认functions.Right我现在用类似下面

$duration = "PT127M"; 
$duration = preg_replace("/[^0-9]/","",$duration); 

有些人告诉我什么样的格式是这样的,如果有可以从中检索分钟内没有任何PHP函数的捷径。

+0

看起来像API特定的API文档中未提及吗? – dmaij

+0

不,我认为它的一些标准时间格式 – Vishnu

+0

奇怪,我不记得这些格式,除了在事件持续时间中使用的1。 – dmaij

回答

4

这可能与ISO 8601 Duration日期格式:

要解决歧义,“P1M”是一个为期一个月的持续时间和“PT1M”是一分钟的时间(注意时间标志,T,时间值之前)。使用的最小值也可能有小数部分,如在“P0.5Y”中表示半年。如“P0,5Y”或“P0.5Y”中所示,可以用逗号或句号指定该小数部分。该标准不会禁止持续时间表示中的日期和时间值超过其“结转点”,除非如下所述。因此,可以使用“PT36H”以及“P1DT12H”来表示相同的持续时间。但请记住,从夏令时切换到“夏令时”时,“PT36H”与“P1DT12H”不同。

您可以使用DateInterval在PHP解析:

这里有一些简单的例子。两天是P2D。两秒钟是PT2S。六年零五分钟是P6YT5M。

有了这个信息,你可以用这个代码解析您的$duration对象:

$duration = 'PT127M'; 
$duration = new DateInterval($duration); // Create a DateInteval Object 
echo $duration->format('%i'); // Print minutes from DateInterval Object 
4

你可以分这样的:

$duration = 'PT127M'; 
    $di = new DateInterval($duration); 
    $minutes = $di->format('%i'); 

此处了解详情:http://php.net/manual/en/class.dateinterval.php

+0

与Florian的回答有什么不同? – jurgemaister

+0

我们同时发布。在测试后,我使用代码编辑了我的答案;) –

+0

弗洛里安在发布这篇文章后编辑了他的答案。此外,我不使用相同的变量为不同的对象类型:) – Karolis