Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Как узнать какое число будет через 6 месяцев
 
 автор: helovek   (08.11.2006 в 19:49)   письмо автору
 
 

Сообщите пожалуйста можно ли узнать какое число будет через 6 месяцев например от сегодняшнего числа?

   
 
 автор: Trianon   (08.11.2006 в 20:15)   письмо автору
 
   для: helovek   (08.11.2006 в 19:49)
 

Можно. точно такое же. например - Восьмое. :)

   
 
 автор: cheops   (08.11.2006 в 22:45)   письмо автору
 
   для: helovek   (08.11.2006 в 19:49)
 

Может имеется в виду день недели? Потому что число будет действительно точно такое же, как и сегодня :)))

   
 
 автор: helovek   (09.11.2006 в 17:24)   письмо автору
 
   для: cheops   (08.11.2006 в 22:45)
 

Нет. Например идет распечатка из формы. системное время тоже распечатывается.
Но мне нужно чтобы выводилось такое же день, месяц ,год, только на 6 мес вперед.
Сегодня 09.11.06 а мне надо 09.05.07но зачем я буду менять каждый раз цифры вручную. Наверное это можно сделатьс помощью регулярных выражений.
Например в Fox есть специальная функция + месяц.

   
 
 автор: Shiva   (09.11.2006 в 19:04)   письмо автору
 
   для: helovek   (09.11.2006 в 17:24)
 

helovek, вам и правда лучше уточнить, какая дата вам требуется. "Через 6 месяцев" - не слишком точное понятие.

   
 
 автор: Temnovit   (09.11.2006 в 18:00)   письмо автору
 
   для: helovek   (08.11.2006 в 19:49)
 


<?
function after_six_months() {
 
//teku6aja data
 
list($day$month$year) = explode("."date("d.m.Y"));
 
$month += 6;   //+ 6 mesjaces
 
if  ($month 12) { //esli pereska4ili 4erez god
    
$year ++;
    
$month -=12;
 }

 return 
"$day.$month.$year";
}


?>

   
 
 автор: Trianon   (09.11.2006 в 18:07)   письмо автору
 
   для: Temnovit   (09.11.2006 в 18:00)
 

Увы. таким образом запросто могут появиться разного рода 29...31 февраля, 31 апреля и т.п.

   
 
 автор: Temnovit   (09.11.2006 в 18:34)   письмо автору
 
   для: Trianon   (09.11.2006 в 18:07)
 

Хммм ну а что же тогда должно вывестись как дата черес 6 месяцев после 31 августа?
Понятно что не 31 февраля.

Слово автору :)

   
 
 автор: helovek   (09.11.2006 в 19:02)   письмо автору
 
   для: Temnovit   (09.11.2006 в 18:34)
 

<?
function after_six_months() {
//teku6aja data
global $day,$month,$year;
list($day, $month, $year) = explode(".", date("d.m.Y"));
$month += 6; //+ 6 mesjaces
if ($month > 12) { //esli pereska4ili 4erez god
$year ++;
$month -=12;
}

echo " Явиться не позднее $day.$month.$year";
}
after_six_months();

?>
Большое спасибо всем!!

   
 
 автор: Shiva   (09.11.2006 в 19:09)   письмо автору
 
   для: helovek   (09.11.2006 в 19:02)
 

Вы читали переписку авторов, которым ответили? Попробуйте выполнить это:

<?
function after_six_months() {
//teku6aja data
    
global $day,$month,$year;
//Это число получит функция date() вторым аргументом 31 августа 2007  
    
$time mktime(0008312007);
    list(
$day$month$year) = explode("."date("d.m.Y"$time));
    
$month += 6//+ 6 mesjaces
    
if ($month 12) { //esli pereska4ili 4erez god
        
$year ++;
        
$month -=12;
    }
    echo 
" Явиться не позднее $day.$month.$year";
}
after_six_months();
?>

Никто к вам не явится... )

   
 
 автор: isset   (10.11.2006 в 00:26)   письмо автору
 
   для: Shiva   (09.11.2006 в 19:09)
 

эх вы, http://ru.php.net/strtotime

   
 
 автор: Trianon   (10.11.2006 в 09:49)   письмо автору
 
   для: isset   (10.11.2006 в 00:26)
 

она тоже не без огрехов.
echo date('%r', strtotime("+6 month", strtotime("Aug 31, 2006 15:15")));
выводит 3-е марта.

   
 
 автор: isset   (10.11.2006 в 10:51)   письмо автору
 
   для: Trianon   (10.11.2006 в 09:49)
 

это не огрех, это дата через 6 месяцев.
А причиной тому - февраль, отсюда эти три дня.

   
 
 автор: Trianon   (10.11.2006 в 11:14)   письмо автору
 
   для: isset   (10.11.2006 в 10:51)
 

3 марта - это дата спустя 6 месяцев от 3 сентября.
Можно было бы споирть, является ли правильным ответом 28 февраля или 1 марта. Но уж никак не 3-е.
to Yakor: я знаю сколько дней в феврале. И дату 31 августа взял не с потолка.

   
 
 автор: kasmanaft   (10.11.2006 в 12:40)   письмо автору
 
   для: Trianon   (10.11.2006 в 11:14)
 

Ого! Интересно ...

<?
echo date('d.m.y'strtotime("+6 month"strtotime("29.08.2006")))."<br>";
echo 
date('d.m.y'strtotime("+6 month"strtotime("30.08.2006")))."<br>";
echo 
date('d.m.y'strtotime("+6 month"strtotime("31.08.2006")))."<br>";
echo 
date('d.m.y'strtotime("+6 month"strtotime("1.09.2006")))."<br>";
echo 
date('d.m.y'strtotime("+6 month"strtotime("2.09.2006")))."<br>";
echo 
date('d.m.y'strtotime("+6 month"strtotime("3.09.2006")));
?>

   
 
 автор: Trianon   (10.11.2006 в 12:49)   письмо автору
 
   для: kasmanaft   (10.11.2006 в 12:40)
 

О чем я и говорю...

   
 
 автор: isset   (10.11.2006 в 18:20)   письмо автору
 
   для: Trianon   (10.11.2006 в 12:49)
 

по твоему правильный ответ будет "Feb 31, 2007 15:15"? Надеюсь нет. А т.к. в феврале всего 28 дней, потеряются три дня: 29, 30, 31, куда их засунуть? Правильно, прибавить к полученной дате.

[поправлено модератором]

   
 
 автор: Yakor   (10.11.2006 в 18:24)   письмо автору
 
   для: isset   (10.11.2006 в 18:20)
 

вот и я о том же :)

   
 
 автор: Trianon   (10.11.2006 в 18:54)   письмо автору
 
   для: isset   (10.11.2006 в 18:20)
 

Я уже написал. Правильным ответом можно считать последний день февраля.
Либо (с некоторой натяжкой) 1 марта.
В противном случае функция вычисления даты +6 месяцев перестает быть монотонной. А это уже криминал.
Kasmanaft, спасибо ему, это наглядно продемонстрировал.

   
 
 автор: isset   (10.11.2006 в 19:23)   письмо автору
 
   для: Trianon   (10.11.2006 в 18:54)
 

для справки: в месяце 29.53 дней, что округляется до 30 дней.

Функция strtotime() использует GNU формат даты

Т.е. функция ведет себя согласно GNU формату. Не думаю что вы умнее людей из www.gnu.org, если они не нашли в этом криминала - значит его нет. Про этот казус сказано кстати в мануале GNU, для точного вычесления следующих/предыдущих _месяцев_ они рекомендуют брать число 15-ое.

В вопросе же автора сказано:
> какое число будет через 6 месяцев например от сегодняшнего числа?
А значит ответ функции правильный.

   
 
 автор: Trianon   (10.11.2006 в 19:39)   письмо автору
 
   для: isset   (10.11.2006 в 19:23)
 

М... шедевер. От первого до последнего слова. Пожалуй, я этот ответ скопирую, мало ли, вдруг удалят.

   
 
 автор: isset   (11.11.2006 в 00:18)   письмо автору
 
   для: Trianon   (10.11.2006 в 19:39)
 

Я очень рад что у вас не осталось аргументов.

   
 
 автор: isset   (10.11.2006 в 18:22)   письмо автору
 
   для: kasmanaft   (10.11.2006 в 12:40)
 

Ничего интересного, 1, 2, 3 февраля есть, 29, 30, 31 нет.

   
 
 автор: Yakor   (10.11.2006 в 10:54)   письмо автору
 
   для: Trianon   (10.11.2006 в 09:49)
 

P.S. в феврале 28 дней

   
 
 автор: Фитч   (14.11.2006 в 16:07)   письмо автору
 
   для: helovek   (08.11.2006 в 19:49)
 

ЧП!!!!
Не проще ли юзать JS:

function after6months()
{
 var d=new Date();
 d.setMonth(d.getMonth()+6);
 document.write(d.toLocaleString());     // или вернуть значение в том виде, в каком надо
}

Проверял - с февралем проблем нет!

   
 
 автор: Yakor   (19.11.2006 в 13:52)   письмо автору
 
   для: Фитч   (14.11.2006 в 16:07)
 

>Проверял - с февралем проблем нет!
а что пишет?

   
 
 автор: Фитч   (20.11.2006 в 20:31)   письмо автору
 
   для: Yakor   (19.11.2006 в 13:52)
 

Пишет 1 марта.
Проверял так:

var d=new Date();

d.setDate(31);

d.setMonth(d.getMonth+сколько_месяцев_до_февраля);

/* и тд */

   
 
 автор: Огонь   (24.11.2006 в 11:05)   письмо автору
 
   для: Фитч   (14.11.2006 в 16:07)
 

>ЧП!!!!
>Не проще ли юзать JS:
Может и проще, но только в данной задаче :
>Нет. Например идет распечатка из формы. системное время тоже распечатывается.
>Но мне нужно чтобы выводилось такое же день, месяц ,год, только на 6 мес вперед
когда зачение даты не используеться в самом рнр

Кстати, вот еще один вариант решения если дата берётся из бд:

"...
При использовании некорректных значений дат результат будет равен NULL. Если при суммировании MONTH, YEAR_MONTH или YEAR номер дня в результирующей дате превышает максимальное количество дней в новом месяце, то номер дня результирующей даты принимается равным последнему дню нового месяца:

mysql> SELECT DATE_ADD('1998-01-30', INTERVAL 1 MONTH);
-> 1998-02-28
..."
http://phpclub.ru/mysql/doc/date-and-time-functions.html

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования