Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Количество месяцев


Автор: Reptor 28.1.2005, 19:18
Задание состоит в следущем:

Есть 2 даты в следущем формате: 2004-05-01 и 2005-01-31 :

Нужно подсчитать количество месяцов которые входят в этот промежуток.

Автор: penizillin 28.1.2005, 19:23
дата из бд берется?

Автор: Reptor 28.1.2005, 19:31
Цитата
дата из бд берется?


Да, даты беруться из БД

Автор: Irokez 28.1.2005, 19:53
Код

<?php
$date1='2004-05-01';
$date2='2005-01-31';
$ar_date1=explode('-', $date1);
$ar_date2=explode('-', $date2);
$nix_date1=mktime(0, 0, 0, $ar_date1[1], $ar_date1[2], $ar_date1[0]);
$nix_date2=mktime(0, 0, 0, $ar_date2[1], $ar_date2[2], $ar_date2[0]);
if($nix_date1 < $nix_date2)
{
   $first=1;
   $last=2;
}
else
{
   $first=2;
   $last=1;
}
echo $month_num=(${'ar_date'.$last}[0] - ${'ar_date'.$first}[0])*12 + (${'ar_date'.$last}[1]-${'ar_date'.$first}[1]);
?>

Автор: Reptor 28.1.2005, 20:17

Расскажите пожалуста как работает эта функция

$nix_date1=mktime(0, 0, 0, $ar_date1[1], $ar_date1[2], $ar_date1[0]);

Автор: Mal Hack 28.1.2005, 20:27
Reptor
http://php.net/mktime

ЗЫ: А зачем так сложно.
Если данные берутся из БД, ты считаем сразу в запросе... Вытаскиваем месяца FROM_UNIXTIME

Автор: Irokez 28.1.2005, 20:29
функция mktime возвращает дату в формате - UNIX timestamp - это количество секунд с момента начала эпохи юникса - 1 января 1970. передаваемые параметры - секунды, минуты, часы, день, месяц, год

Автор: Reptor 1.2.2005, 14:00
и ещё одно: если есть 2 даты например (но их может быть N-ое количество):

2005-02-24 и 2005-04-15
2005-05-26 и 2005-08-01

надо найти общее количество месяцов которые входят в эти периоды, но тут уже на количество месяцов будет также влиять количество дней. Например если выйдет в первом промежутке 4 месяца и 20 дней а во втором 3 месяца и 15 дней то это получеться 8 месяцев и только то дней. Тоесть нужно знать точное количество месяцов и дней. (8 месяцев и 5 дней (это к примеру)).



Автор: Mal Hack 1.2.2005, 14:36
Reptor
mktime все сделает за тебя..

Автор: Reptor 1.2.2005, 15:03
Цитата
mktime все сделает за тебя..


Всмысле как это будет выглядеть?

Автор: Mal Hack 1.2.2005, 15:42
Reptor
если у тебя при вычитании дней получится перебор, т.е. 33 дня, то она автоматом увеличит кол-во месяцев на 1 и сделает кол-во дней нормальным.

Автор: Secandr 1.2.2005, 15:51
Проще в бд сделать:
Код

INT ((UNIX_TIMESTAMP(date2)-UNIX_TIMESTAMP(date1))/(30*24*3600))

или что-то вроде этого.

Автор: Reptor 1.2.2005, 16:04
Mal Hack

а можно примерчик.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)