Работа с датой в PHP и MySQL - помогите!

goodier
На сайте с 10.03.2009
Offline
36
1617

Здравствуйте!

Вчера столкнулся с такой вот проблемой, не смог прибавить к текущей дате 30 дней.

В админке создал форму с селектом "yes" и "no"


<form name='fRealPlan".$row[0]."' id='fRealPlan".$row[0]."' action='tarifplan.php' method='POST'>
<td bgcolor='666666' align='center'>
<select name='plan' id='RealPlan".$row[0]."' onchange=\"javascript:document.forms['fRealPlan".$row[0]."'].submit();\">
<option value='$row[plan]' selected>$row[plan]</option>
<option value='yes' >Yes</option>
<option value='no'>No</option>
</select>
<INPUT TYPE='hidden' name='sub_code' VALUE='$row[sub_code]'>
<INPUT TYPE='hidden' name='sub_login' VALUE='$row[sub_login]'>
&nbsp;<noscript><input type='submit' value='выбрать'></noscript>
</td></form>

все данные передаются в файл tarifplan.php в котором не хватает окончания даты

($enddat = 'окончание срока тарифного плана';) для записи в БД

<?php  

$date = date( "d.m.y" );
$login = $_POST['sub_login'];
$plan = $_POST['plan'];
$login = mysql_real_escape_string( $login );
$plan = mysql_real_escape_string( $plan );
include ( "SQLconect.php" );
if ( $plan == "yes" )
{
mysql_query( "UPDATE subagent SET plan='$plan' WHERE sub_login='$login'" ); // Обновляю столбец plan и ставлю значение YES
$query = "INSERT INTO period_plan SET login='$login', startdat ='$date', enddat='$enddat'"; // Создаю поле с датой начала и окончания тарифного плана
mysql_query( $query ) or die ( mysql_error ( ) );
echo "<script> alert( 'Тарифный план Субагента $login изменен' ); document.location.href='part.php'; </script>";
}
if ( $plan != "yes" )
{
mysql_query( "UPDATE subagent SET plan = '$plan' WHERE sub_login = '$login'" ); // Обновляю столбец plan и ставлю значение NO
mysql_query( "DELETE FROM period_plan WHERE login = '$login'" ); // Удаляю поле с логином парнера
echo "<script> alert( 'Тарифный план Субагента $login изменен' ); document.location.href='part.php'; </script>";
}
?>

Как прибавить к текущей дате 30 дней (28.11.09)? чтоб получить формат 28.12.09

И как потом в файле авторизации проверить этот срок окончания?

Вот что я написал в файле авторизации в котором проверяется окончание срока


$period_plan = mysql_fetch_array( mysql_query( "select * from period_plan where login='$user'" ) );
$end_srok= $period_plan[enddat];
if ($date == $end_srok)
{
mysql_query( "UPDATE subagent SET plan='no' WHERE sub_login='$user'" );
mysql_query("DELETE FROM period_plan WHERE login = '$user'");
}

так вот написал и получается что если текуший день 28.11.09 больше 09.12.09 то исключение понимает, что текущая дата больше срока окончания, то есть в этом случае исключение не видит месяц.

Подскажите как прибавить к текущей дате 30 дней, очень нужно!

C2
На сайте с 14.07.2009
Offline
83
#1

используйте функцию DATE_ADD

SELECT DATE_ADD(NOW(), INTERVAL 1 MONTH);

http://www.mysql.ru/docs/man/Date_and_time_functions.html

K
На сайте с 28.12.2008
Offline
61
kud
#2
goodier:


Подскажите как прибавить к текущей дате 30 дней, очень нужно!

// Unix время

$time = time();

// тридцать дней

$days30 = 60*60*24*30;

$enddat = date( "d.m.y",$time + $days30 );

moonters
На сайте с 09.10.2008
Offline
139
#3

Зачем создавать себе лишний гемор сначала при записи в БД, а потом после извлечения?

Запишите время начала с помощью date (), а время окончания date () + 30*24*60*60

Мобильные прокси беру только тут - https://goo.su/G5nhch
[Удален]
#4

первый вариант лучше, второй не учитывает високосные года и т.п.

предложу еще крутой вариант


$new_timestamp=strtotime('+30 days');
goodier
На сайте с 10.03.2009
Offline
36
#5

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

Загнал в переменную Unix время $time = time();

В базу я использовал вариант который посоветовал neolord $enddat = date( "d.m.y",$time + $days30 );

INSERT INTO period_plan SET login='$login', startdat ='$time', enddat='$enddat'

затем в файле авторизации вытянул с базы $enddat

и проверил в исключении конец даты тарифного плана

if ($time > $enddat)

{

mysql_query( "UPDATE subagent SET plan='no' WHERE sub_login='$user'" );

mysql_query("DELETE FROM period_plan WHERE login = '$user'");

}

Всем спасибо, очень благодарен Вам!

Contentos
На сайте с 25.11.2009
Offline
10
#6

Странно, но никто не упомянул о стандартной функции php mktime();

Для прибавки 30 дней, можно выполнить:

date("d.M.y", mktime (0, 0, 0, date("m"), date("d")+30, date("Y")));
0f3d3d
FeoOne
На сайте с 27.12.2008
Offline
32
#7

храните время в timestamp

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий