0

似乎有很多信息将时间段转换为时间,但反之则不然。

我需要做的一个例子是将 120 分钟转换为 P0DT2H0M0S。和 13:10 进入 P0DT13H10M0S。120 分钟进入 PT2H0M0S。

有什么快速简单的方法来做到这一点?

4

2 回答 2

1

我相信您所描述的格式是 ISO 8601 日期/时间格式。 这是它描述间隔的方式。

DateInterval该类的 PHP 文档中,有人分享了一个示例,说明如何以面向对象的方式将字符串转换为 ISO 8601:

http://www.php.net/manual/en/class.dateinterval.php#113415

这是别人的解决方案,使用功能而不是面向对象的日期方法:

https://stackoverflow.com/a/13301472/2119660

于 2013-10-29T02:56:45.070 回答
0

获得 ISO-8601 时间间隔持续时间的最简单方法是使用方法createFromDateString

采用:

echo getISO8601duration_withZeros("3 year 20 day 15 minute"); # P3Y0M20DT0H15M0S
echo getISO8601duration_withZeros("1 hour 120 minutes");      # P0Y0M0DT1H120M0S
echo getISO8601duration_withZeros("7 year 5 month 3 day");    # P7Y5M3DT0H0M0S

# 13:10 example
$dt = new DateTime('13:10');
$interval_spec = "{$dt->format('H')} hour {$dt->format('i')} minute";
echo getISO8601duration_withZeros($interval_spec);            # P0Y0M0DT13H10M0S

功能:

function getISO8601duration_withZeros($interval_spec) {
    $interval = DateInterval::createFromDateString($interval_spec);
    return $interval->format('P%yY%mM%dDT%hH%iM%sS');
}

示范:

于 2013-10-29T08:52:41.137 回答