Имейте в виду, что преобразование длительностей, содержащих дни, месяцы и / или годы, в длительность, например секунды, не может быть выполнено точно без знания фактической даты / времени начала.
Например
1 SEP 2010: +P1M2D means +2764800 seconds
1 OCT 2010: +P1M2D means +2851200 seconds
Это потому, что в сентябре 30 дней, а в октябре 31 день. Та же проблема возникает с преобразованием интервалов года из-за високосных лет и високосных секунд. Високосные годы также усложняют конвертацию Месяца - поскольку февраль в високосные годы на один день длиннее, чем в противном случае. Дни являются проблематичными в районах, где практикуется летнее время - однодневный период, происходящий во время перехода на летнее время, фактически на 1 час длиннее, чем он был бы в противном случае.
Все, что говорится - вы, конечно, можете сжать значения, содержащие только Часы, минуты и секунды, в значения, содержащие только секунды. Я бы посоветовал вам создать простой парсер для выполнения работы (или, возможно, рассмотреть регулярное выражение).
Просто знайте о ловушках, описанных выше - там будут драконы. Если вы намереваетесь иметь дело с днями, месяцами и / или годами, вам нужно использовать один из встроенных механизмов, чтобы выполнить математику для вас в контексте известной даты / времени. Как уже упоминали другие: класс DateInterval в сочетании с функциями, предоставляемыми в классе DateTime, является, вероятно, наиболее интуитивным способом решения этой проблемы. Но это доступно только в PHP версии 5.3.0 или выше.
Если вам нужно работать с версией ниже v5.3.0, вы можете попытаться построить что-нибудь вокруг этой маленькой жемчужины:
$startDateTime = '19700101UTC';
$duration = strtotime( $startDateTime.'+1Year1Day1Second' ) - strtotime($startDateTime);
print("Duration in Seconds: $duration");
strtotime
не будет работать с форматом ISO 8601 напрямую (например, P1Y1DT1S
), но формат, который он понимает понимает (1Year1Day1Second
), не слишком далек - он было бы довольно простым преобразованием. (немного "хакерский" ... но для вас это PHP).
удачи!