strtotime php mysql - PullRequest
       8

strtotime php mysql

1 голос
/ 21 ноября 2010

Все, что я пытаюсь сделать, это заставить php-файл накапливать конечную дату из вспомогательной даты. Я не понимаю, почему эта функция strtotime не работает. Моя база данных хранит даты как "Y-m-d".

вот код:

//disguised for security reasons
$db = mysql_connect("*******", "*******","********");
mysql_select_db("*******",$db);

$getad = mysql_query("SELECT id, annual_sub_date FROM members WHERE annual_sub_date!=null", $db);
while ($gad = mysql_fetch_array($getad)) {
$id = $gad['id'];
$asd = $gad['annual_sub_date'];
$aedate_time = strtotime('+1 year', $asd);
$aedate = date("Y-m-d", $aedate_time);
mysql_query("UPDATE members SET annual_end_date='$aedate', annual_active='Y' WHERE id='$id'");
}

--------- РЕШЕНО ЭТО ---------

Я немного поиграл в XBox Split / Second, а затем понял проблему. Мой разум вернулся к PHP / MySQL 101. Я все правильно написал, кроме части "! = Null".

//Wrong Way
$getad = mysql_query("SELECT id, annual_sub_date FROM members WHERE annual_sub_date!=null", $db);

//Correct Way
$getad = mysql_query("SELECT id, annual_sub_date FROM members WHERE annual_sub_date IS NOT NULL", $db);

Теперь все работает :) Это проблемы, которые вы можете ожидать при кодировании в 5:01 утра. * 10101 *

Ответы [ 2 ]

3 голосов
/ 21 ноября 2010

Первый аргумент strtotime - это абсолютная или относительная дата в виде строки, второй аргумент - целочисленная отметка времени.Вы даете ему относительную дату (строку) в качестве первого аргумента и абсолютную дату (также строку) в качестве второго.Вам нужно преобразовать $asd в метку времени, используя сначала strtotime.

$aedate_time = strtotime('+1 year', strtotime($asd));

Кстати, вы можете выполнить весь расчет даты и обновление в SQL одним запросом, не нужно проделывать долгий путьвокруг через PHP.

0 голосов
/ 21 ноября 2010

Это потому, что strtotime требует метки времени в качестве второго аргумента , а не строки в Ymd.Просто попробуйте фрагмент кода ниже, чтобы увидеть, что я имею в виду.

$gad = array('annual_sub_date' => '2010-11-21');
// wrong
// $asd = $gad['annual_sub_date'];
// good; convert to timestamp
list($year, $month, $day) = explode('-', $gad['annual_sub_date']);
$asd = mktime(0, 0, 0, $month, $day, $year);
$aedate_time = strtotime('+1 year', $asd);
$aedate = date("Y-m-d", $aedate_time);
echo $aedate . "\n";
...