Я знаю, что это поздний ответ, и что-то уже принято, но я нашел лучшее решение для меня - не устанавливать прозрачность UIView
напрямую, а вместо этого установить цвет фона на 0,0, 0,0, делая цвет полностью прозрачным.
Имейте в виду, что преобразование длительностей, содержащих дни, месяцы и / или годы, в длительность, например секунды, не может быть выполнено точно без знания фактической начальной даты / времени.
Например,
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).
удачи!
То, что вы ищете, это DateTime :: diff
Объект DateInterval, представляющий разницу между двумя датами или FALSE при ошибке, как показано ниже:
$datetime1 = new DateTime('2009-10-11');
$datetime2 = new DateTime('2009-10-13');
$interval = $datetime1->diff($datetime2);
echo $interval->format('%R%d days');
Просто используйте секунды вместо дат.
Это из http://www.php.net/manual/en/datetime.diff.php
Ссылку на DateInterval см. В http: // www.php.net/manual/en/class.dateinterval.php