0

我想将动态月份插入数据库,例如如果用户选择三月,那么我需要插入从三月到二月的 12 个月的记录。我正在获得动态月份,但是当我尝试将其插入数据库时​​,它仅插入前 12 个月。如果用户单击添加更多按钮,我需要从 3 月到 2 月再次重复循环。这是我的代码:

$months = array();
$date="august";
$year= '2014';
//$y= (int)$year;
$currentMonth= date('m', strtotime($date));
$currentyear= date('Y', strtotime('+1 year'));
for($x = $currentMonth; $x < $currentMonth+12; $x++) 
{ 
    $months[] = date('F Y', mktime(0, 0, $currentyear, $x,1));
}
//print_r($months);
for($i=0; $i<=23 ; $i++)
{

 echo $insert= "insert into month(month_name) values('".$months[$i]."')";

}
4

3 回答 3

0

也许您可以使用 DateTime 对象来执行此操作。

$string = '01-08-2013'; //input string from user

$StartDate = new DateTime($string); 
$StopDate = new DateTime($string);
$StopDate->modify('+1 year');

while($StartDate < $StopDate) { //loop as long as $StartDate is smaller than $StopDate
    echo "inserting " . $StartDate->format('d/m/Y') . ' into database ' . "<br/>";

    //execute mysql query;

    $StartDate->modify('+1 month');
}
于 2013-07-25T11:56:11.413 回答
0

由于您的月份数组只有 12 个值,因此您不能转到该数组中的 23 值。您可以做的是从 0 到 11 两次遍历数组,如下所示:

for($j=0; $j<2 ; $j++)
{
  for($i=0; $i<12 ; $i++)
  {
    echo $insert= "insert into month(month_name) values('".$months[$i]."')";
  }
}

或者如 clyde 所示,您可以使用模运算符,这不会让您浪费 2 个循环,因此速度更快:

  for($i=0; $i<24 ; $i++)
  {
    echo $insert= "insert into month(month_name) values('".$months[$i % 12]."')";
  }
于 2013-07-25T11:50:34.233 回答
0

您的问题应该说明您为什么要在数据库中保留这一系列月份,因为通常没有人这样做。通常人们将事务/事件记录的时间戳放入数据库中,然后对其进行报告。

于 2013-07-25T12:07:45.683 回答