Преобразование интервалов для DateInterval и DateTime

A_J

Новичок
Формат временных интервалов для класса DateInterval как мы знаем имеет вид например "P1D" для 1 дня.
DateTime::modify принимает выражения вида "+1 day".

Существуют ли уже инструменты преобразования из одного вида в другой?
 

AnrDaemon

Продвинутый новичок
Задай вопрос нормально.
Чего именно ты хочешь достичь?
 

AnrDaemon

Продвинутый новичок
Ты вопрос не понимаешь или не хочешь понимать? Исходная задача какая?
 

Вурдалак

Продвинутый новичок
Существуют ли уже инструменты преобразования из одного вида в другой?
Существуют. Тебе библиотеку, сайт или приложение десктопное?

Учитывая, что нам, судя по всему, не приходит в голову практическое применение, то мы хотим понять твою мотивацию.

Например: «мне сложно вводить интервал в формате ISO 8601, я хочу проще».
 

A_J

Новичок
Тебе библиотеку
Мне библиотеку.
Например: «мне сложно вводить интервал в формате ISO 8601, я хочу проще».
Мне неохота руками менять формат интервалов класса DateInterval в формат интервалов класса DateTime и наоборот - там, где это должен делать код.

Ещё можно спросить "зачем тебе преобразовывать строку в число" и что-либо подобное, чтобы подольше не отвечать на заданный вопрос.
 

AnrDaemon

Продвинутый новичок
Мне неохота руками менять формат интервалов класса DateInterval в формат интервалов класса DateTime и наоборот - там, где это должен делать код.
Зачем вообще это делать?… Голову включи и ответь уже на вопрос.
 

Вурдалак

Продвинутый новичок
Мне неохота руками менять формат интервалов класса DateInterval в формат интервалов класса DateTime и наоборот - там, где это должен делать код.
Такой проблемы нет. $date->add(new DateInterval(...)), $date->add(DateInterval::createFromDateString('1 day'));
Ты борешься с какой-то несуществующей проблемой.
 

A_J

Новичок
Такой проблемы нет. $date->add(new DateInterval(...)), $date->add(DateInterval::createFromDateString('1 day'));
Ты борешься с какой-то несуществующей проблемой.
Конечно, конечно.

Функция ConvertInterval($interval). На входе - интервалы в форме "P1D", либо объект соответствующего класса.
На выходе - "+1 days" либо объект.
Если проблемы не существует - напиши функцию в 1 строку.
 

fixxxer

К.О.
Партнер клуба
@A_J, попробую объяснить иначе то, что тебе уже сказали.

У DateInterval есть два конструктора.
Дефолтный конструктор работает с форматом вида P1D:
PHP:
new DateInterval("P1D");
Именованный конструктор createFromDateString работает с форматом вида "+1 day":
PHP:
DateInterval::createFromDateString('+1 day')
В итоге ты для любого из входных форматов имеешь возможность получить объект DateInterval, что и требуется.

Если тебе требуется наоборот из объекта DateInterval получить исходную строку - это значит, что ты плохо спроектировал свой проект. Переписывай на работу с DateInterval.
 

sanmai

Новичок
Преобразование в строку делается на счёт раз:

PHP:
$interval = new DateInterval('P2Y4DT6H8M');
echo $interval->format('%d days');
Но это не нужно, так как можно так:


PHP:
$date = new \DateTime('2015-05-23 00:10:20');
echo $date->format("Y-m-d H:i:s\n");

// барабанная дробь!
$date->add(new DateInterval('P1D'));
echo $date->format("Y-m-d H:i:s\n");
Выведет так:

Код:
2015-05-23 00:10:20
2015-05-24 00:10:20
 
Сверху