2010-11-21 93 views
1

我想要做的就是让php文件从子日期累积结束日期。我不明白为什么这个时间函数不起作用。我的数据库将日期存储为“Y-m-d”。strtotime php mysql

下面的代码:

//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分流/秒位然后才意识到这个问题。我的头脑回到了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编码的问题。

回答

3

strtotime的第一个参数是一个绝对或相对日期字符串,第二个参数是一个整数时间戳。你给它一个相对日期(字符串)作为第一个参数,绝对日期(也是字符串)作为第二个参数。您需要首先使用strtotime$asd转换为时间戳。

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

顺便说一句,你可以做在SQL全日期计算和更新与单个查询,无需通过PHP采取绕很长的路要走。

+0

感谢您的光临和帮助。我可以稍后使用它。 – yanike 2010-11-21 11:09:10

0

这是因为strtotime需要时间戳作为第二个参数而不是Y-m-d中的字符串日期。 只需尝试下面的代码片段即可查看我需要的内容。

 
$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";