выполнение операций с датой и временем в PHP - PullRequest
7 голосов
/ 11 сентября 2008

Как вы на самом деле выполняете операции даты и времени, такие как добавление даты, нахождение разницы, определение количества дней, исключая выходные в интервале? Лично я начал передавать некоторые из этих операций моим postgresql dbms, так как обычно мне нужно было всего лишь выполнить одну инструкцию sql, чтобы получить ответ, однако, чтобы сделать это на PHP, я должен был бы написать гораздо больше кода, что означает больше шансов для ошибок ...

Существуют ли в PHP какие-либо библиотеки, которые выполняют операции datetime таким образом, что не требуют большого количества кода? что превосходит SQL в ситуации, когда «Учитывая две даты, сколько рабочих дней между двумя датами? Реализовать либо в SQL, либо в $ pet_lang ', который решается с помощью этого запроса?

SELECT  COUNT(*) AS total_days
FROM    (SELECT date '2008-8-26' + generate_series(0,
          (date '2008-9-1' - date '2008-8-26')) AS all_days) AS calendar
WHERE   EXTRACT(isodow FROM all_days) < 6;

Ответы [ 12 ]

0 голосов
/ 11 сентября 2008

@ Rushi Мне лично не нравится strtotime () .. я не знаю почему, но сегодня утром я обнаружил, что передача строки типа '2008-09-11 9: 5 AM' в strtotime возвращает false. ..

Я не думаю, что код, который вы предоставили, решает проблему примера «Учитывая две даты, сколько рабочих дней между этими датами? Реализуйте либо в SQL, либо в $ pet_lang ', и я не рассматриваю, есть ли у меня список праздничных дней ...

0 голосов
/ 11 сентября 2008

Вы можете использовать комбинацию strtotime , mktime и date для выполнения арифметики

Вот пример, который использует комбо для некоторой арифметики http://rushi.wordpress.com/2008/04/13/php-print-out-age-of-date-in-words/ Я приведу здесь код для простоты

if ($timestamp_diff < (60*60*24*7)) {
   echo floor($timestamp_diff/60/60/24)." Days";
} elseif ($timestamp_diff > (60*60*24*7*4)) {
   echo floor($timestamp_diff/60/60/24/7)." Weeks";
} else {
   $total_months = $months = floor($timestamp_diff/60/60/24/30);
   if($months >= 12) {
      $months = ($total_months % 12);
      $years&nbsp; = ($total_months - $months)/12;
      echo $years . " Years ";
   }
   if($months > 0)
      echo $months . " Months";
}
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...