1

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

这是代码:

//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 进行编码的问题。

4

2 回答 2

3

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

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

顺便说一句,您可以通过单个查询在 SQL 中进行整个日期计算和更新,无需通过 PHP 走很长的路。

于 2010-11-21T10:08:49.680 回答
0

这是因为strtotime 需要时间戳作为第二个参数,而不是 Ymd 中的字符串日期。只需尝试下面的代码片段,看看我说了什么。

$gad = array('annual_sub_date' => '2010-11-21');
// 错误的
// $asd = $gad['annual_sub_date'];
// 好的; 转换为时间戳
list($year, $month, $day) = explode('-', $gad['annual_sub_date']);
$asd = mktime(0, 0, 0, $month, $day, $year);
$aedate_time = strtotime('+1 年', $asd);
$aedate = date("Ymd", $aedate_time);
回声 $aedate 。"\n";
于 2010-11-21T10:18:55.757 回答