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

  • Автор темы Автор темы A_J
  • Дата начала Дата начала

A_J

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

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

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

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

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

Конечно, конечно.

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

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

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

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
 
Сверху