PHP将时间转换为时间段

时间:2013-10-29 02:40:01

标签: php string time intervals period

似乎有很多信息将时间段转换为时间段,但不是相反。

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

任何快速简便的方法吗?

2 个答案:

答案 0 :(得分:1)

我相信您描述的格式是ISO 8601日期/时间格式。 Here's how it describes intervals.

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

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

以下是其他人的解决方案,使用功能而非面向对象的日期方法:

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

答案 1 :(得分: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');
}

演示: