2012-06-18 4 views
0

У меня возник вопрос относительно правильного способа изменения объекта php DateTime. В настоящее время, я делаю что-то вроде:изменение php объекта DateTime

$origEvent = new DateTime(...); 
$newEvent = new DateTime(...); 
$someOtherEvent = new DateTime(...); 

//get the time difference between the orignal event and the edited event 
$diff = $origEvent->diff($newEvent); 

$someOtherEvent->add($diff); 

Использование DateTime :: добавить метод() кажется работать ли мы сложения или вычитания времени от $ someOtherEvent. Это правильный способ сделать это? Я знаю, что для вычитания времени используется DateTime :: sub(), но кажется, что до тех пор, пока DateInterval (созданный $ origEvent-> diff()) имеет инвертированный флаг, DateTime :: add() знает, фактически вычитают время. Это верно? Должен ли я использовать что-то вроде DateTime :: modify?

+0

@hakre Не важно, что это вообще важно, мне было просто интересно, почему теги были изменены? Функции, которые я имел в виду, доступны только в php5, поэтому я решил, что специфика важна. Опять же, не имеет значения для меня, просто любопытно для будущих сообщений :) – Greg

ответ

0

Фактически DateTime :: diff() возвращает относительную разность между двумя объектами DateTime. Таким образом:

  • Если date1 ниже, чем дата2 затем date1-> Diff (дата2) будет приводить к отрицательным интервала
  • Если дата2 ниже, чем date1 затем date1-> Diff (дата2) приведет к положительного интервал

Итак:

  • использование DateTime :: добавить() с отрицательным интервалом equival к использованию DateTime :: sub() с абсолютным значение этого же интервала
  • Использование DateTime :: sub() с отрицательным интервалом эквивалентно использованию DateTime :: add() с абсолютного значения этого же интервал

из соображений ясности коды вы можете установить второй параметр DateTime :: Diff() к истинному для того, чтобы получить абсолютное значение каждый раз, а затем выберите наилучшая функция между DateTime :: add() и DateTime :: sub(), зная, что вы имеете абсолютную разницу.

Несколько слов о выборе между DateTime :: изменить() и DateTime :: Add(), DateTime: к югу():

  • Пока вы используете DateTime :: Diff() вы предполагая, что ваша версия PHP больше или равна 5.3.0, и вы можете использовать все новые функции, доступные в этой версии PHP; то есть DateTime :: add() и DateTime :: sub()
  • Использование DateTime :: modify() оправдано, если ваша версия PHP больше или равна 5.2.0. (В этой версии DateTime :: add() и DateTime :: sub() пока недоступны)
+0

А, не видел этого второго аргумента метода diff. Я думаю, что вы правы, я чувствовал себя нехорошим, используя только функцию добавления (хотя это работает так, как я думал, что так будет), таким образом, этот пост родился. Спасибо за ясность, очень ценю. – Greg

+0

Как говорит язык программирования Ruby: «Код должен быть кристально чистым, хороший код говорит читателю точно, что он пытается сделать. Отличный код кричит о своем намерении». Таким образом, используя только функцию добавления, понимание вашего кода становится более сложным. И, используя правильную функцию в правильных обстоятельствах, ваш код становится более понятным. Пожалуйста ;) – fsenart

Смежные вопросы