Подскажите как это сделать?
Поискал сам, нашел только как прибавить, но без учета количества дней в месяце, т.е. прибавить 30 дней.
Спустя 51 минута, 52 секунды (12.09.2009 - 12:58) jetistyum написал(а):
если к 31 прибавить месяц.... то не уверен что получится 28..
а если к 30 прибавить месяц, какое будет?
а к 29-му?
а если к 30 прибавить месяц, какое будет?
а к 29-му?
Спустя 22 минуты (12.09.2009 - 13:20) Dimka написал(а):
Нужно прибавлять календарный месяц.
Если к 31 января прибавить месяц, то получиться должно 28 февраля (т.к. в феврале 28 дней).
если вот так:
Если к 31 января прибавить месяц, то получиться должно 28 февраля (т.к. в феврале 28 дней).
если вот так:
PHP |
date("d-m-Y",mktime(0,0,0,date("m")+1,date("d"),date("Y")); |
то прибавляя к 31 января 1 месяц, получаем 03 марта.
Прибавляя к 4 марта месяц получаем 4 апреля. Тут все нормально. Вот последние числа месяца не попадают. Можно ли это как-то сделать, как нам надо?
Спустя 40 минут, 28 секунд (12.09.2009 - 14:00) glock18 написал(а):
может
PHP |
strtotime("+1 month"); |
Спустя 37 минут, 41 секунда (12.09.2009 - 14:38) Dimka написал(а):
Цитата (glock18 @ 12.09.2009 - 11:00) | ||
может
|
Тоже саме вместо 28 февраля получается 3 марта.
Видимо придется использовать так как есть. Может есть еще у кого-нибудь какие мысли?
Спустя 17 минут, 22 секунды (12.09.2009 - 14:55) Гость_hara написал(а):
как это использовать так как есть, всегда можно сделать вручную)
ну то есть просто берёте месяц, прибавляете к нему единицу если уже не 12
затем собираете дату и проверяете корректна ли она при помощи функции
checkdate если нет то уменьшаете день до тех пор пока не будет корректна
не так уж и сложно.
ну то есть просто берёте месяц, прибавляете к нему единицу если уже не 12
затем собираете дату и проверяете корректна ли она при помощи функции
checkdate если нет то уменьшаете день до тех пор пока не будет корректна
не так уж и сложно.
Спустя 34 минуты, 2 секунды (12.09.2009 - 15:29) Гость_hara написал(а):
ну вот почему то не лень было:
PHP |
function dateAfterMonth($m=1,$d=1,$y=1970) |
проверка:
PHP |
print 'in: 31 December 1970<br>'; |
на выходе:
PHP |
in: 31 December 1970 |
как то так, 1988 высокосный...
Спустя 1 минута, 5 секунд (12.09.2009 - 15:30) Гость_hara написал(а):
потерялся кусочек проверки
in: 31 January 1988
out: 29 February 1988
in: 31 January 1988
out: 29 February 1988
Спустя 43 минуты, 29 секунд (12.09.2009 - 16:14) Guest написал(а):
Гость_hara, благодарю.
Спустя 19 часов, 42 минуты, 30 секунд (13.09.2009 - 11:56) jetistyum написал(а):
что-то я всеравно логики не понимаю.
прибавляем месяц к 28 янв, получаем 28 февр
к 29 - всеравно 28
к 30 - опять 28
к 31 - снова 28 февраля.
а фактически 3 дня разницы.
как-то это странно получается,
прибавляем месяц к 28 янв, получаем 28 февр
к 29 - всеравно 28
к 30 - опять 28
к 31 - снова 28 февраля.
а фактически 3 дня разницы.
как-то это странно получается,
Спустя 1 час, 24 минуты, 31 секунда (13.09.2009 - 13:21) Гость_hara написал(а):
Ну да так и есть в итоге.
А логики? ну допустим платные услуги на месяц, раз так и обманули дня на три, -
а почему бы и нет? ))
месяц как бы другой, и что поделать что в нём нет такого числа как в этом))
хотя хотелось бы узнать для чего это нужно на самом деле)
А логики? ну допустим платные услуги на месяц, раз так и обманули дня на три, -
а почему бы и нет? ))
месяц как бы другой, и что поделать что в нём нет такого числа как в этом))
хотя хотелось бы узнать для чего это нужно на самом деле)
Спустя 1 год, 5 месяцев, 5 дней, 4 часа, 59 минут, 4 секунды (18.02.2011 - 19:20) Шифу написал(а):
Ну вы пи%. В таком случае проще сплитануть слово на числа, как 14/11/2001 и тупо заменять второе и третье число без календарных потерь
Спустя 4 часа, 20 минут, 39 секунд (18.02.2011 - 23:41) Snus написал(а):
Месяц может быть 28, 30, 31... дней. Сделай условность, что месяц, допустим 30 дней и прибавляй к дате через strtotime();
Спустя 16 часов, 35 минут, 25 секунд (19.02.2011 - 16:16) YVSIK написал(а):
а по моему это гораздо проще
вот у мен так работает и ровно месяц
и ни дня боле и ни дня мене
а принт это или эхо всёж равно
можно и эхо
вот у мен так работает и ровно месяц
и ни дня боле и ни дня мене
<?php print (date("Y:m:d",time()+ 30*24*60*60));?>
а принт это или эхо всёж равно
можно и эхо
Спустя 8 месяцев, 9 часов, 52 минуты, 33 секунды (20.10.2011 - 01:09) Гость_Владимир написал(а):
Я написал вот такую функцию по прибавление определенного количества месяцев к дате:
Считает количество дней в каждом конкретном месяце и прибавляет
function add_month_to_date($date, $m){
if (is_numeric($m)){
while ($m>0){
$date += cal_days_in_month(CAL_GREGORIAN, strftime("%m",$date), strftime("%G",$date))*24*60*60;
$m--;
}
}
return $date;
}
Считает количество дней в каждом конкретном месяце и прибавляет
Спустя 6 месяцев, 29 дней, 10 часов, 6 минут, 56 секунд (19.05.2012 - 11:16) metra52 написал(а):
Гость_Владимир такой вопрос, а в каком формате должна быть переменная $date
Спустя 17 минут, 38 секунд (19.05.2012 - 11:33) Invis1ble написал(а):
metra52
ты на дату его коммента посмотри сначала
$date в его примере это timestamp
ты на дату его коммента посмотри сначала
$date в его примере это timestamp
Спустя 3 минуты, 43 секунды (19.05.2012 - 11:37) metra52 написал(а):
Просто мне нужна такая функция, и то что предлагает он у меня не прокатывает... тоесть мне допустим к этой дате 2012-05-19 нужно прибавить ровно месяц с учетом колличества дней в месяце
Спустя 6 минут, 19 секунд (19.05.2012 - 11:43) Invis1ble написал(а):
echo date('Y-m-d', strtotime('2012-05-19 +1 month'));
Спустя 5 минут, 51 секунда (19.05.2012 - 11:49) metra52 написал(а):
а если нужная дата забита в БД как ее вставить в эту функцию, что бы к ней прибавлялось оплаченное колличество месяцев
Спустя 2 минуты, 3 секунды (19.05.2012 - 11:51) Invis1ble написал(а):
из твоего вопроса ничего непонятно, создай отдельный топик и там сформулируй четко задачу
Спустя 2 месяца, 6 дней, 17 часов, 1 минута, 34 секунды (26.07.2012 - 04:53) шип написал(а):
2 YVSIK
не работает. К 01.08.2012 ни хрена месяц не прибавляет - принтит, мол, 31.08.2012.
рази это месяц? Это всего лишь 30 дней, а 30 дней далеко не всегда месяц...
не работает. К 01.08.2012 ни хрена месяц не прибавляет - принтит, мол, 31.08.2012.
рази это месяц? Это всего лишь 30 дней, а 30 дней далеко не всегда месяц...
Спустя 3 дня, 13 часов, 56 минут, 29 секунд (29.07.2012 - 18:49) YVSIK написал(а):
шип
Ты сюда зачем забрел?
чтоб просто потролить? может ??? да?
так вот ФУНКЦИЯ date() определяет именно дату и при сложении чисел будет выдавать именно согласно календаря и не арифметических ваших выкладок
как пример: если сегодня 28 февраля и прибавить 30 то получится конечно 28 марта ну на то ты и программист чтоб решить этот вопрос, а не наоборот,
тебе и решать как ты это будешь решать.
можете это решить при помощи условий несовпадений , думаю что подобных условий будет не так и много(месяцев в году вего двенадцать
), и что с того так и будем к этому претензии выдавать?
Наверно надо решить что нужно тебе а не тролить по любому поводу, и ещё хорошенько изучить эту функцию date()
ну возможно ещё выбрать некое среднее арифметическое, что то-же не очень и будет критично и мало кто вас в этом будет упрекать такова система счислений дней в календаре !!!
Ты сюда зачем забрел?
чтоб просто потролить? может ??? да?
так вот ФУНКЦИЯ date() определяет именно дату и при сложении чисел будет выдавать именно согласно календаря и не арифметических ваших выкладок
как пример: если сегодня 28 февраля и прибавить 30 то получится конечно 28 марта ну на то ты и программист чтоб решить этот вопрос, а не наоборот,
тебе и решать как ты это будешь решать.
можете это решить при помощи условий несовпадений , думаю что подобных условий будет не так и много(месяцев в году вего двенадцать

Наверно надо решить что нужно тебе а не тролить по любому поводу, и ещё хорошенько изучить эту функцию date()
ну возможно ещё выбрать некое среднее арифметическое, что то-же не очень и будет критично и мало кто вас в этом будет упрекать такова система счислений дней в календаре !!!
Спустя 2 минуты (29.07.2012 - 18:51) Игорь_Vasinsky написал(а):
Цитата |
при помощи условий несовпадений |
в PHP 6 появились?
Спустя 2 дня, 11 часов, 43 минуты, 16 секунд (1.08.2012 - 06:34) шип написал(а):
2 YVSIK
Ну отчего же. Например, в Oracle
, а
там посчитали нужным использование такой функции, а в php, видимо, нет. Как впрочем и типа даты... В ккакой там версии опомнились, в 5 или 6... в виде конструктора?
А так то написать ручками все можно - и двенадцать месяцев учитывать и високосные года. И разные там средние и не средние, месяцы-черезмесяцы...
Ну отчего же. Например, в Oracle
SELECT ADD_MONTHS(to_date('30.01.2010','dd.mm.yyyy'), 1) FROM DUALвернет дату ’28.02.2010’
, а
SELECT ADD_MONTHS(to_date('30.01.2012','dd.mm.yyyy'), 1) FROM DUALвернет дату ’29.02.2012’
там посчитали нужным использование такой функции, а в php, видимо, нет. Как впрочем и типа даты... В ккакой там версии опомнились, в 5 или 6... в виде конструктора?
А так то написать ручками все можно - и двенадцать месяцев учитывать и високосные года. И разные там средние и не средние, месяцы-черезмесяцы...