Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Количество месяцев 
:(
    Опции темы
Reptor
Дата 28.1.2005, 19:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1213
Регистрация: 29.12.2004

Репутация: 0
Всего: 0



Задание состоит в следущем:

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

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

PM MAIL ICQ   Вверх
penizillin
Дата 28.1.2005, 19:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 312
Регистрация: 10.11.2004

Репутация: 8
Всего: 9



дата из бд берется?
PM MAIL ICQ   Вверх
Reptor
Дата 28.1.2005, 19:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1213
Регистрация: 29.12.2004

Репутация: 0
Всего: 0



Цитата
дата из бд берется?


Да, даты беруться из БД
PM MAIL ICQ   Вверх
Irokez
Дата 28.1.2005, 19:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


индеец
***


Профиль
Группа: Участник Клуба
Сообщений: 1180
Регистрация: 20.10.2004

Репутация: 22
Всего: 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]);
?>

PM   Вверх
Reptor
Дата 28.1.2005, 20:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1213
Регистрация: 29.12.2004

Репутация: 0
Всего: 0




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

$nix_date1=mktime(0, 0, 0, $ar_date1[1], $ar_date1[2], $ar_date1[0]);
PM MAIL ICQ   Вверх
Mal Hack
Дата 28.1.2005, 20:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



Reptor
http://php.net/mktime

ЗЫ: А зачем так сложно.
Если данные берутся из БД, ты считаем сразу в запросе... Вытаскиваем месяца FROM_UNIXTIME
PM ICQ   Вверх
Irokez
Дата 28.1.2005, 20:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


индеец
***


Профиль
Группа: Участник Клуба
Сообщений: 1180
Регистрация: 20.10.2004

Репутация: 22
Всего: 53



функция mktime возвращает дату в формате - UNIX timestamp - это количество секунд с момента начала эпохи юникса - 1 января 1970. передаваемые параметры - секунды, минуты, часы, день, месяц, год
PM   Вверх
Reptor
Дата 1.2.2005, 14:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1213
Регистрация: 29.12.2004

Репутация: 0
Всего: 0



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

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

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



PM MAIL ICQ   Вверх
Mal Hack
Дата 1.2.2005, 14:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



Reptor
mktime все сделает за тебя..
PM ICQ   Вверх
Reptor
Дата 1.2.2005, 15:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1213
Регистрация: 29.12.2004

Репутация: 0
Всего: 0



Цитата
mktime все сделает за тебя..


Всмысле как это будет выглядеть?
PM MAIL ICQ   Вверх
Mal Hack
Дата 1.2.2005, 15:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



Reptor
если у тебя при вычитании дней получится перебор, т.е. 33 дня, то она автоматом увеличит кол-во месяцев на 1 и сделает кол-во дней нормальным.
PM ICQ   Вверх
Secandr
Дата 1.2.2005, 15:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Связист
****


Профиль
Группа: Экс. модератор
Сообщений: 4043
Регистрация: 3.8.2003
Где: Russia, Volgograd

Репутация: 5
Всего: 39



Проще в бд сделать:
Код

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

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

Это сообщение отредактировал(а) Secandr - 1.2.2005, 15:51


--------------------
Мышки плакали, кололись, но продолжали жрать кактусы (с) cisco
PM ICQ AOL   Вверх
Reptor
Дата 1.2.2005, 16:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1213
Регистрация: 29.12.2004

Репутация: 0
Всего: 0



Mal Hack

а можно примерчик.
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0515 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.