在php中,每个月的第29天再添加相同的值

时间:2014-08-29 08:29:45

标签: php mysql date

我是php的初学者。我正在尝试使用月份和年份名称创建表列,但不幸的是我的代码给了我一个错误。同样的价值又来了。

例如:,January_2015,March_2015,March_2015,April_2015

它在2月份遗漏了2次并且行军2次。因此,表创建中提供的值相同。我的sql说“无法创建表:重复列名'March_2015'”。

当我设定任何月份的第29天时,就会发生这种情况。如果我设置本地日期1-28它运作良好。这是我的代码:

{
include("conn1.php");  
$random =trim($_POST['uid']);
$qP = "SELECT * FROM mayureg WHERE memail='$random'";   
//echo $qP;  
$rsP = mysql_query($qP);   
$row = mysql_fetch_array($rsP);   
extract($row);   
$id = $row['id'];   
$mname = $row['memail'];   

mysql_close();  


$kow=$mname;  
echo $kow;  
//echo "arun $tid";
  1. 我从这里开始计算当月的月份
  2. $date=date('Y-m');   
    $d0=DateTime::createFromFormat('Y-m', $date);    
    $d0 = $d0->format('F_Y');   
    
    $d1 = DateTime::createFromFormat('Y-m', $date);   
    $d1->add(new DateInterval('P1M'));   
    $d1 = $d1->format('F_Y');   
    $d2 = DateTime::createFromFormat('Y-m', $date);   
    $d2->add(new DateInterval('P2M'));    
    $d2 = $d2->format('F_Y');   
    $d3 = DateTime::createFromFormat('Y-m', $date);   
    $d3->add(new DateInterval('P3M'));   
    $d3 = $d3->format('F_Y');   
    $d4 = DateTime::createFromFormat('Y-m', $date);   
    $d4->add(new DateInterval('P4M'));   
    $d4 = $d4->format('F_Y');   
    $d5 = DateTime::createFromFormat('Y-m', $date);   
    $d5->add(new DateInterval('P5M'));   
    $d5 = $d5->format('F_Y');   
    $d6 = DateTime::createFromFormat('Y-m', $date);   
    $d6->add(new DateInterval('P6M'));   
    $d6 = $d6->format('F_Y');   
    $d7 = DateTime::createFromFormat('Y-m', $date);   
    $d7->add(new DateInterval('P7M'));   
    $d7 = $d7->format('F_Y');   
    $d8 = DateTime::createFromFormat('Y-m', $date);   
    $d8->add(new DateInterval('P8M'));   
    $d8 = $d8->format('F_Y');   
    $d9 = DateTime::createFromFormat('Y-m', $date);   
    $d9->add(new DateInterval('P9M'));   
    $d9 = $d9->format('F_Y');  
    $d10 = DateTime::createFromFormat('Y-m', $date);   
    $d10->add(new DateInterval('P10M'));   
    $d10 = $d10->format('F_Y');   
    $d11 = DateTime::createFromFormat('Y-m', $date);   
    $d11->add(new DateInterval('P11M'));   
    $d11 = $d11->format('F_Y');   
    $d12 = DateTime::createFromFormat('Y-m', $date);   
    $d12->add(new DateInterval('P12M'));   
    $d12 = $d12->format('F_Y');   
    
    $dbhost = 'localhost';   
    $dbuser = 'root';   
    $dbpass = '';   
    
    $conn = mysql_connect($dbhost, $dbuser, $dbpass);   
    mysql_select_db('phholder');   
    if(! $conn )    
    {   
      die('Could not connect: ' . mysql_error());   
    }
    
    1. 我使用变量创建表
    2. echo 'Connected successfully';   
      $sql = 'CREATE TABLE`'.$kow.'`(    
       '.'uid VARCHAR(255),    
       '.'sal VARCHAR(255),    
      '.'phnam VARCHAR(255),    
      '.'phdob VARCHAR(255),    
      '.'gen VARCHAR(255),    
      '.'emptype VARCHAR(255),    
      '.'occu VARCHAR(255),    
      '.'annu VARCHAR(255),    
      '.'tax VARCHAR(255),   
      '.'phmob VARCHAR(255),    
      '.'phmob1 VARCHAR(255),    
      '.'phemail VARCHAR(255),    
      '.'eduq VARCHAR(255),    
      '.'mstat VARCHAR(255),    
      '.'pnam VARCHAR(255),    
      '.'ptab VARCHAR(255),    
      '.'pterm VARCHAR(255),    
      '.'psum VARCHAR(255),    
      '.'ppre VARCHAR(255),    
      '.'pdoc VARCHAR(255),    
      '.'pmode VARCHAR(255),    
      '.'pmatu VARCHAR(255),    
      '.'pnom VARCHAR(255),    
      '.'prela VARCHAR(255),    
      '.'pnage VARCHAR(255),    
      '.'pstat VARCHAR(255),    
      '.'pdist VARCHAR(255),    
      '.'pcity VARCHAR(255),    
      '.'parea VARCHAR(255),    
      '.'padd1 VARCHAR(255),    
      '.'padd2 VARCHAR(255),    
      '.'ppcode VARCHAR(255),    
      '.'pndue VARCHAR(255),    
      '.'pexp VARCHAR(255),    
      '.''.$d0.' VARCHAR(255) not null default 0,   
      '.'pay'.$d0.' VARCHAR(255)  not null default 0,   
      '.''.$d1.' VARCHAR(255) not null default 0,   
      '.'pay'.$d1.' VARCHAR(255)  not null default 0,   
      '.''.$d2.' VARCHAR(255) not null default 0,    
      '.'pay'.$d2.' VARCHAR(255) not null default 0,   
      '.''.$d3.' VARCHAR(255) not null default 0,   
      '.'pay'.$d3.' VARCHAR(255) not null default 0,   
      '.''.$d4.' VARCHAR(255) not null default 0,   
      '.'pay'.$d4.' VARCHAR(255) not null default 0,   
      '.''.$d5.' VARCHAR(255) not null default 0,   
      '.'pay'.$d5.' VARCHAR(255) not null default 0,   
      '.''.$d6.' VARCHAR(255) not null default 0,   
      '.'pay'.$d6.' VARCHAR(255) not null default 0,   
      '.''.$d7.' VARCHAR(255) not null default 0,   
      '.'pay'.$d7.' VARCHAR(255) not null default 0,   
      '.''.$d8.' VARCHAR(255) not null default 0,   
      '.'pay'.$d8.' VARCHAR(255) not null default 0,   
      '.''.$d9.' VARCHAR(255) not null default 0,   
      '.'pay'.$d9.' VARCHAR(255) not null default 0,   
      '.''.$d10.' VARCHAR(255) not null default 0,   
      '.'pay'.$d10.' VARCHAR(255) not null default 0,   
      '.''.$d11.' VARCHAR(255) not null default 0,   
      '.'pay'.$d11.' VARCHAR(255) not null default 0,   
      '.''.$d12.' VARCHAR(255) not null default 0,   
      '.'pay'.$d12.' VARCHAR(255) not null default 0,   
      
       PRIMARY KEY (`uid`),   
        UNIQUE KEY `uid` (`uid`)   
      )';
      
      1. 表的
      2. 的MySQL执行
            
        $retval = mysql_query( $sql, $conn );   
        if(! $retval )   
        {   
          die('Could not create table: ' . mysql_error());   
        }   
        echo $kow;   
        echo "Table  created successfully\n";   
        mysql_close($conn);    
        
        }
        
        1. 每月29日此代码中给出的错误

2 个答案:

答案 0 :(得分:0)

要简化日期列表的生成,请使用数组和循环

$d = array();
$date = new DateTime('first day of this month');
$interval = new DateInterval('P1M');
for ($i = 1; $i <= 12; $i++) {
    $d[] = $date->format('F_Y'); 
    $date->add($interval);
}
var_dump($d);

因为我们从本月的第一天开始工作,所以2月29日非闰年,或4月31日或任何其他没有31天的日子,你都不会有任何问题

但是你也应该规范化你的数据库设计,这样你就没有月份作为列,而是一个单独的月份表

答案 1 :(得分:0)

我找到了答案。这是我的代码

<?php 
function add($date_str, $months)
{
    $date = new DateTime($date_str);
    $start_day = $date->format('j');

    $date->modify("+{$months} month");
    $end_day = $date->format('j');

1。检查这里开始和结束日期是否相等。如果没有采取一个月的最后一天

    if ($start_day != $end_day)
        $date->modify('last day of last month');

    return $date;
}


$date=date('Y-m');

$d0 = add($date, 0);  
$d0 = $d0->format('F_Y');
echo $d0;
echo "<br>";

$d1 = add($date, 1);  
$d1 = $d1->format('F_Y');
echo $d1;
echo "<br>";

$d2 = add($date, 2);  
$d2 = $d2->format('F_Y');
echo $d2;
echo "<br>";

$d3 = add($date, 3); 
$d3 = $d3->format('F_Y');
echo $d3;
echo "<br>";
$d4 = add($date, 4); 
$d4 = $d4->format('F_Y');
echo $d4;
echo "<br>";
$d5 = add($date, 5);  
$d5 = $d5->format('F_Y');
echo $d5;
echo "<br>";
$d6 = add($date, 6);  
$d6 = $d6->format('F_Y');
echo $d6;
echo "<br>";


$d7 = add($date, 7);  
$d7 = $d7->format('F_Y');
echo $d7;
echo "<br>";
$d8 = add($date, 8);  
$d8 = $d8->format('F_Y');
echo $d8;
echo "<br>";
$d9 = add($date, 9); 
$d9 = $d9->format('F_Y');
echo $d9;
echo "<br>";
$d10 = add($date, 10);  
$d10 = $d10->format('F_Y');
echo $d10;
echo "<br>";
$d11 = add($date, 11); 
$d11 = $d11->format('F_Y');
echo $d11;
echo "<br>";
$d12 = add($date, 12); 
$d12 = $d12->format('F_Y');
echo $d12;
echo "<br>";
$d13 = add($date, 13); 
$d13 = $d13->format('F_Y');
echo $d13;
echo "<br>";
$d14 = add($date, 14); 
$d14 = $d14->format('F_Y');
echo $d14;
echo "<br>";

感谢每一位帮助......

归功于Mr. Crend King 个人资料ID [链接] https://stackoverflow.com/users/153133/crend-king

[链接] PHP: Adding months to a date, while not exceeding the last day of the month