powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / [PHP+MSQL] Прибавление месяца к текущей дате
25 сообщений из 45, страница 1 из 2
[PHP+MSQL] Прибавление месяца к текущей дате
    #38354637
Маша и
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет всем! Помогите решить задачу, вот нашлась такая функция

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
$date = date("Y-m-d H:i:s");

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;
}



Функция типа считает количество дней в каждом конкретном месяце и прибавляет.

Но когда я делаю так
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
$date = date("Y-m-d H:i:s");

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;
}
mysqlQuery("UPDATE `table1` 
                         SET
                         `date_start` = '$date',
                         `date_end` = '".add_month_to_date($date) ."'
                         WHERE id........... и т.д.");



то вставляется просто текущая дата. Что я делаю не так?
...
Рейтинг: 0 / 0
[PHP+MSQL] Прибавление месяца к текущей дате
    #38354658
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
http://www.php.net/manual/en/datetime.add.php
авторDateTime::add -- date_add — Adds an amount of days, months, years, hours, minutes and seconds to a DateTime object
...
Рейтинг: 0 / 0
[PHP+MSQL] Прибавление месяца к текущей дате
    #38354732
Маша и
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ScareCrow http://www.php.net/manual/en/datetime.add.php
авторDateTime::add -- date_add — Adds an amount of days, months, years, hours, minutes and seconds to a DateTime object

Вот это интересно, а как это применить, можно пожалуйста пример?
Мне важно что бы было так, если сегодня 31 января + месяц = получится 28 февраля.
...
Рейтинг: 0 / 0
[PHP+MSQL] Прибавление месяца к текущей дате
    #38354906
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Маша иScareCrow http://www.php.net/manual/en/datetime.add.php
пропущено...


Вот это интересно, а как это применить, можно пожалуйста пример?
Мне важно что бы было так, если сегодня 31 января + месяц = получится 28 февраля.

Это неправильно (хотя не знаю, надо понять зачем). Итак, а зачем это?
просто 28 января + 1 месяц = 28 февраля. 29,30,31 января + месяц тоже равно 28 февраля. То есть тут логика нечёткая.
...
Рейтинг: 0 / 0
[PHP+MSQL] Прибавление месяца к текущей дате
    #38354984
Маша и
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ПрограмёрМаша ипропущено...


Вот это интересно, а как это применить, можно пожалуйста пример?
Мне важно что бы было так, если сегодня 31 января + месяц = получится 28 февраля.

Это неправильно (хотя не знаю, надо понять зачем). Итак, а зачем это?
просто 28 января + 1 месяц = 28 февраля. 29,30,31 января + месяц тоже равно 28 февраля. То есть тут логика нечёткая.
Именно так, что же тут поделаешь :)

Тут такая замануха :) вот например гарантия на "чайник" один месяц, куплен - 31 января.
Значит заканчивается ровно через календарный месяц ровно 28 февраля. По григорианскому календарю в феврале 28 дней (в високосном году — 29 дней). Соответственно если в высокосном году тогда 29 дней.
...
Рейтинг: 0 / 0
[PHP+MSQL] Прибавление месяца к текущей дате
    #38355064
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Маша и,

Хм )) Тоже нашёл ту же функцию что и Вы. Вообщем... а там надо указывать количество месяцев для добавления... А Вы не указали (вторым параметром). то есть надо add_month_to_date($date, 1)
...
Рейтинг: 0 / 0
[PHP+MSQL] Прибавление месяца к текущей дате
    #38355163
Маша и
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ПрограмёрМаша и,

Хм )) Тоже нашёл ту же функцию что и Вы. Вообщем... а там надо указывать количество месяцев для добавления... А Вы не указали (вторым параметром). то есть надо add_month_to_date($date, 1)

add_month_to_date($date, 1) - Добавило 0000-00-00 00:00:00

Что же делать?
...
Рейтинг: 0 / 0
[PHP+MSQL] Прибавление месяца к текущей дате
    #38355266
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Маша иПрограмёрМаша и,

Хм )) Тоже нашёл ту же функцию что и Вы. Вообщем... а там надо указывать количество месяцев для добавления... А Вы не указали (вторым параметром). то есть надо add_month_to_date($date, 1)

add_month_to_date($date, 1) - Добавило 0000-00-00 00:00:00

Что же делать?

у меня вообще функции cal_days_in_month не находит почему-то. но могу сказать, что $date должно быть не строкой даты, а timestamp'ом. то есть надо первую строку приведённого кода заменить на $date = time() и всё должно заработать (если данная функция вообще рабочая).
...
Рейтинг: 0 / 0
[PHP+MSQL] Прибавление месяца к текущей дате
    #38355274
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автору меня вообще функции cal_days_in_month не находит почему-то.
интересно почему?
...
Рейтинг: 0 / 0
[PHP+MSQL] Прибавление месяца к текущей дате
    #38355282
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ScareCrowавтору меня вообще функции cal_days_in_month не находит почему-то.
интересно почему?

Знал бы, рассказал )). А вообще я не локально у себя на компе пробую... Я на разных онлайн интерпретаторах запускаю (так быстрее). Так что фиг знает, может у них там что...

кстати да... Попробовал на другом и всё запустилось. рабочий пример вот:
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
$date = time();

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;
}

echo date("Y-m-d H:i:s", add_month_to_date($date, 1));
...
Рейтинг: 0 / 0
[PHP+MSQL] Прибавление месяца к текущей дате
    #38355297
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторЗнал бы, рассказал )).

авторInstallation ¶

To get these functions to work, you have to compile PHP with --enable-calendar .


The Windows version of PHP has built-in support for this extension.


Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
<?php

   error_reporting(-1);
$date = time();

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;
}

echo date("Y-m-d H:i:s", add_month_to_date($date, 1));



авторWarning: cal_days_in_month(): invalid date. in C:\xampp\htdocs\peretz\www\index.php on line 9
2013-08-05 13:24:41
...
Рейтинг: 0 / 0
[PHP+MSQL] Прибавление месяца к текущей дате
    #38355317
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ScareCrowавторЗнал бы, рассказал )).

авторInstallation ¶

To get these functions to work, you have to compile PHP with --enable-calendar .


The Windows version of PHP has built-in support for this extension.


Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
<?php

   error_reporting(-1);
$date = time();

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;
}

echo date("Y-m-d H:i:s", add_month_to_date($date, 1));



авторWarning: cal_days_in_month(): invalid date. in C:\xampp\htdocs\peretz\www\index.php on line 9
2013-08-05 13:24:41

хм... не функция, а хрень какая-то :) тут работает: http://writecodeonline.com/php/
Может лучше другую написать?
...
Рейтинг: 0 / 0
[PHP+MSQL] Прибавление месяца к текущей дате
    #38355337
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автортут работает: http://writecodeonline.com/php/

авторWarning: strftime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. on line 8

Warning: strftime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. on line 8

Warning: date(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. on line 15
2013-09-05 11:42:19
...
Рейтинг: 0 / 0
[PHP+MSQL] Прибавление месяца к текущей дате
    #38355370
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ScareCrowавтортут работает: http://writecodeonline.com/php/

авторWarning: strftime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. on line 8

Warning: strftime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. on line 8

Warning: date(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. on line 15
2013-09-05 11:42:19

?! )) На сервере часовой пояс не выставлен, если в php.ini его выставить (или вызвать set_default_timezone), то варнингов не будет. А так, если посмотреть на результат, то он правильный (за исключением нескольких часов, как-раз из-за часового пояса).
...
Рейтинг: 0 / 0
[PHP+MSQL] Прибавление месяца к текущей дате
    #38355377
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Програмёр,

эм... ошибся... эту функцию date_default_timezone_set, а не set_default_timezone
...
Рейтинг: 0 / 0
[PHP+MSQL] Прибавление месяца к текущей дате
    #38355378
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторА так, если посмотреть на результат, то он правильный (за исключением нескольких часов
слово "жжошь" меня просили не говорить, но других у меня просто нет.
...
Рейтинг: 0 / 0
[PHP+MSQL] Прибавление месяца к текущей дате
    #38355389
14664576
вообще непонял?!
Код: php
1.
strftime("%Y",$date)


это раз...
14663392 - как прибавленные январские 31! день помогут ТС? - это два?
...
Рейтинг: 0 / 0
[PHP+MSQL] Прибавление месяца к текущей дате
    #38355391
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ScareCrowавторА так, если посмотреть на результат, то он правильный (за исключением нескольких часов
слово "жжошь" меня просили не говорить, но других у меня просто нет.
правильно, не надо говорить. Вы лучше объясните что Вам кажется смешным. Сами понимаете "смех без причины ....". То есть давайте, если с чего-то смеётесь, то объясняйте почему.

Я например смешного не вижу ничего. В пределах одного часового пояса (UTC) всё работает правильно. И если я выставлю часовой пояс на сервере как у себя, или у себя выставлю UTC, то и для моей системы код не будет сбиваться в несколько часов.

Так что рассказывайте, чего смеётесь, иначе Ваше сообщение можно считать чистой воды троллингом.
...
Рейтинг: 0 / 0
[PHP+MSQL] Прибавление месяца к текущей дате
    #38355425
ShSerge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Програмёр,

А на SQL-сервере в дату не добавить месяц, типа dateadd, если MS SQL?
...
Рейтинг: 0 / 0
[PHP+MSQL] Прибавление месяца к текущей дате
    #38355436
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот работающий вариант:
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
function add_months($ts, $months){
  list($y, $m, $d, $h, $i, $s)=explode(':', date("Y:m:d:H:i:s", $ts));
  $d = mktime($h, $i, $s, $m+$months, $d, $y);
  if (date("m", $d)+12*(date("Y", $d))!=$y*12+$m+$months){
    $d = mktime($h, $i, $s, $m+$months+1, 0, $y);
  }
  return $d;
}

echo date("Y-m-d", add_months(strtotime("2013-01-31"), 1));



ShSerge, в случае с 31 января там, думаю, будет точно такая же ситуация (31 января + 1 месяц = 3 марта), а автору надо иначе, потому лучше эту логику на стороне php оставить. На входе и на выходе timestamp.
...
Рейтинг: 0 / 0
[PHP+MSQL] Прибавление месяца к текущей дате
    #38355461
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Програмёрвот работающий вариант:
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
function add_months($ts, $months){
  list($y, $m, $d, $h, $i, $s)=explode(':', date("Y:m:d:H:i:s", $ts));
  $d = mktime($h, $i, $s, $m+$months, $d, $y);
  if (date("m", $d)+12*(date("Y", $d))!=$y*12+$m+$months){
    $d = mktime($h, $i, $s, $m+$months+1, 0, $y);
  }
  return $d;
}

echo date("Y-m-d", add_months(strtotime("2013-01-31"), 1));






адЪ и израиль.

Код: php
1.
echo date('r', strtotime('last day of next month', $the_date));
...
Рейтинг: 0 / 0
[PHP+MSQL] Прибавление месяца к текущей дате
    #38355466
Alex Choo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А что мешает проверить?

select dateadd(mm, 1, '2013-01-31 00:00:00.000')

2013-02-28 00:00:00.000
...
Рейтинг: 0 / 0
[PHP+MSQL] Прибавление месяца к текущей дате
    #38355468
авторвот работающий вариант:
гыгыгы...
интэресно! а до 31 МАРТА вообще гарантия предусматривается... !?
...
Рейтинг: 0 / 0
[PHP+MSQL] Прибавление месяца к текущей дате
    #38355472
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: php
1.
2.
3.
4.
<?php
$d = new DateTime( '2010-01-08' );
$d->modify( 'last day of next month' );
echo $d->format( 'l jS \of F Y h:i:s A' ), "\n";
...
Рейтинг: 0 / 0
[PHP+MSQL] Прибавление месяца к текущей дате
    #38355477
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ScareCrowПрограмёрвот работающий вариант:
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
function add_months($ts, $months){
  list($y, $m, $d, $h, $i, $s)=explode(':', date("Y:m:d:H:i:s", $ts));
  $d = mktime($h, $i, $s, $m+$months, $d, $y);
  if (date("m", $d)+12*(date("Y", $d))!=$y*12+$m+$months){
    $d = mktime($h, $i, $s, $m+$months+1, 0, $y);
  }
  return $d;
}

echo date("Y-m-d", add_months(strtotime("2013-01-31"), 1));






адЪ и израиль.

Код: php
1.
echo date('r', strtotime('last day of next month', $the_date));



Это точно :) Как насчёт рабочего варианта... а то в данном контексте
$d = mktime($h, $i, $s, $m+$months+1, 0, $y);
лучше чем
$d = date('r', strtotime('last day of next month', $the_date))

Скажу больше... второй вариант просто бессмыслен в данной функции :)
Пишем код, а потом объясняем "мой код лучше, потому что ...". Иначе какой смысл того, что Вы пишите? Просто что бы сказать "нет, не так - можно лучше, но как - не знаю"?
...
Рейтинг: 0 / 0
25 сообщений из 45, страница 1 из 2
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / [PHP+MSQL] Прибавление месяца к текущей дате
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]