|
|
|
| Сообщите пожалуйста можно ли узнать какое число будет через 6 месяцев например от сегодняшнего числа? | |
|
|
|
|
|
|
|
для: helovek
(08.11.2006 в 19:49)
| | Можно. точно такое же. например - Восьмое. :) | |
|
|
|
|
|
|
|
для: helovek
(08.11.2006 в 19:49)
| | Может имеется в виду день недели? Потому что число будет действительно точно такое же, как и сегодня :))) | |
|
|
|
|
|
|
|
для: cheops
(08.11.2006 в 22:45)
| | Нет. Например идет распечатка из формы. системное время тоже распечатывается.
Но мне нужно чтобы выводилось такое же день, месяц ,год, только на 6 мес вперед.
Сегодня 09.11.06 а мне надо 09.05.07но зачем я буду менять каждый раз цифры вручную. Наверное это можно сделатьс помощью регулярных выражений.
Например в Fox есть специальная функция + месяц. | |
|
|
|
|
|
|
|
для: helovek
(09.11.2006 в 17:24)
| | helovek, вам и правда лучше уточнить, какая дата вам требуется. "Через 6 месяцев" - не слишком точное понятие. | |
|
|
|
|
|
|
|
для: 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";
}
?>
|
| |
|
|
|
|
|
|
|
для: Temnovit
(09.11.2006 в 18:00)
| | Увы. таким образом запросто могут появиться разного рода 29...31 февраля, 31 апреля и т.п. | |
|
|
|
|
|
|
|
для: Trianon
(09.11.2006 в 18:07)
| | Хммм ну а что же тогда должно вывестись как дата черес 6 месяцев после 31 августа?
Понятно что не 31 февраля.
Слово автору :) | |
|
|
|
|
|
|
|
для: 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();
?>
Большое спасибо всем!! | |
|
|
|
|
|
|
|
для: helovek
(09.11.2006 в 19:02)
| | Вы читали переписку авторов, которым ответили? Попробуйте выполнить это:
<?
function after_six_months() {
//teku6aja data
global $day,$month,$year;
//Это число получит функция date() вторым аргументом 31 августа 2007
$time = mktime(0, 0, 0, 8, 31, 2007);
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)
| | она тоже не без огрехов.
echo date('%r', strtotime("+6 month", strtotime("Aug 31, 2006 15:15")));
выводит 3-е марта. | |
|
|
|
|
|
|
|
для: Trianon
(10.11.2006 в 09:49)
| | это не огрех, это дата через 6 месяцев.
А причиной тому - февраль, отсюда эти три дня. | |
|
|
|
|
|
|
|
для: isset
(10.11.2006 в 10:51)
| | 3 марта - это дата спустя 6 месяцев от 3 сентября.
Можно было бы споирть, является ли правильным ответом 28 февраля или 1 марта. Но уж никак не 3-е.
to Yakor: я знаю сколько дней в феврале. И дату 31 августа взял не с потолка. | |
|
|
|
|
|
|
|
для: 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")));
?>
|
| |
|
|
|
|
|
|
|
для: kasmanaft
(10.11.2006 в 12:40)
| | О чем я и говорю... | |
|
|
|
|
|
|
|
для: Trianon
(10.11.2006 в 12:49)
| | по твоему правильный ответ будет "Feb 31, 2007 15:15"? Надеюсь нет. А т.к. в феврале всего 28 дней, потеряются три дня: 29, 30, 31, куда их засунуть? Правильно, прибавить к полученной дате.
[поправлено модератором] | |
|
|
|
|
|
|
|
для: isset
(10.11.2006 в 18:20)
| | вот и я о том же :) | |
|
|
|
|
|
|
|
для: isset
(10.11.2006 в 18:20)
| | Я уже написал. Правильным ответом можно считать последний день февраля.
Либо (с некоторой натяжкой) 1 марта.
В противном случае функция вычисления даты +6 месяцев перестает быть монотонной. А это уже криминал.
Kasmanaft, спасибо ему, это наглядно продемонстрировал. | |
|
|
|
|
|
|
|
для: Trianon
(10.11.2006 в 18:54)
| | для справки: в месяце 29.53 дней, что округляется до 30 дней.
Функция strtotime() использует GNU формат даты
|
Т.е. функция ведет себя согласно GNU формату. Не думаю что вы умнее людей из www.gnu.org, если они не нашли в этом криминала - значит его нет. Про этот казус сказано кстати в мануале GNU, для точного вычесления следующих/предыдущих _месяцев_ они рекомендуют брать число 15-ое.
В вопросе же автора сказано:
> какое число будет через 6 месяцев например от сегодняшнего числа?
А значит ответ функции правильный. | |
|
|
|
|
|
|
|
для: isset
(10.11.2006 в 19:23)
| | М... шедевер. От первого до последнего слова. Пожалуй, я этот ответ скопирую, мало ли, вдруг удалят. | |
|
|
|
|
|
|
|
для: Trianon
(10.11.2006 в 19:39)
| | Я очень рад что у вас не осталось аргументов. | |
|
|
|
|
|
|
|
для: kasmanaft
(10.11.2006 в 12:40)
| | Ничего интересного, 1, 2, 3 февраля есть, 29, 30, 31 нет. | |
|
|
|
|
|
|
|
для: Trianon
(10.11.2006 в 09:49)
| | P.S. в феврале 28 дней | |
|
|
|
|
|
|
|
для: helovek
(08.11.2006 в 19:49)
| | ЧП!!!!
Не проще ли юзать JS:
function after6months()
{
var d=new Date();
d.setMonth(d.getMonth()+6);
document.write(d.toLocaleString()); // или вернуть значение в том виде, в каком надо
}
|
Проверял - с февралем проблем нет! | |
|
|
|
|
|
|
|
для: Фитч
(14.11.2006 в 16:07)
| | >Проверял - с февралем проблем нет!
а что пишет? | |
|
|
|
|
|
|
|
для: Yakor
(19.11.2006 в 13:52)
| | Пишет 1 марта.
Проверял так:
var d=new Date();
d.setDate(31);
d.setMonth(d.getMonth+сколько_месяцев_до_февраля);
/* и тд */
|
| |
|
|
|
|
|
|
|
для: Фитч
(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 | |
|
|
|