【问题标题】:adding months gave same value again 29th day of every month in php [duplicate]在php中每个月的第29天再次添加月份具有相同的值[重复]
【发布时间】:2014-08-29 08:29:44
【问题描述】:

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

例如:,2015 年 1 月,2015 年 3 月,2015 年 3 月,2015 年 4 月

它遗漏了 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. 我从这里开始从当前月份开始计算月份
$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->格式('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->格式('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->格式('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->格式('F_Y'); $d11 = DateTime::createFromFormat('Y-m', $date); $d11->add(new DateInterval('P11M')); $d11 = $d11->格式('F_Y'); $d12 = DateTime::createFromFormat('Y-m', $date); $d12->add(new DateInterval('P12M')); $d12 = $d12->format('F_Y'); $dbhost = '本地主机'; $dbuser = 'root'; $dbpass = ''; $conn = mysql_connect($dbhost, $dbuser, $dbpass); mysql_select_db('phholder'); 如果(!$conn) { die('无法连接:' . mysql_error()); }
  1. 我正在使用变量创建表
echo '连接成功'; $sql = '创建表`'.$kow.'`( '.'uid VARCHAR(255), '.'sal VARCHAR(255), '.'phnam VARCHAR(255), '.'phdob VARCHAR(255), '.'gen VARCHAR(255), '.'emptype VARCHAR(255), '.' 出现 VARCHAR(255), '.'annu VARCHAR(255), '.'税 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) 不为 null 默认为 0, '.'支付'.$d0。' VARCHAR(255) 不为 null 默认为 0, '.''.$d1.' VARCHAR(255) 不为 null 默认为 0, '.'支付'.$d1.' VARCHAR(255) 不为 null 默认为 0, '.''.$d2.' VARCHAR(255) 不为 null 默认为 0, '.'支付'.$d2.' VARCHAR(255) 不为 null 默认为 0, '.''.$d3.' VARCHAR(255) 不为 null 默认为 0, '.'支付'.$d3.' VARCHAR(255) 不为 null 默认为 0, '.''.$d4.' VARCHAR(255) 不为 null 默认为 0, '.'支付'.$d4.' VARCHAR(255) 不为 null 默认为 0, '.''.$d5.' VARCHAR(255) 不为 null 默认为 0, '.'支付'.$d5.' VARCHAR(255) 不为 null 默认为 0, '.''.$d6.' VARCHAR(255) 不为 null 默认为 0, '.'支付'.$d6.' VARCHAR(255) 不为 null 默认为 0, '.''.$d7.' VARCHAR(255) 不为 null 默认为 0, '.'支付'.$d7.' VARCHAR(255) 不为 null 默认为 0, '.''.$d8.' VARCHAR(255) 不为 null 默认为 0, '.'支付'.$d8.' VARCHAR(255) 不为 null 默认为 0, '.''.$d9.' VARCHAR(255) 不为 null 默认为 0, '.'支付'.$d9。' VARCHAR(255) 不为 null 默认为 0, '.''.$d10.' VARCHAR(255) 不为 null 默认为 0, '.'支付'.$d10。' VARCHAR(255) 不为 null 默认为 0, '.''.$d11.' VARCHAR(255) 不为 null 默认为 0, '.'支付'.$d11。' VARCHAR(255) 不为 null 默认为 0, '.''.$d12.' VARCHAR(255) 不为 null 默认为 0, '.'支付'.$d12。' VARCHAR(255) 不为 null 默认为 0, 主键(`uid`), 唯一键 `uid` (`uid`) )';
  1. 表的 MySQL 执行
$retval = mysql_query($sql, $conn); 如果(!$retval ) { die('无法创建表:' . mysql_error()); } 回声$kow; echo "表创建成功\n"; mysql_close($conn); }
  1. 此代码在每月 29 日给出错误

【问题讨论】:

  • 每四年就能正常工作一年
  • 如果将 1 个月加到 1 月 29 日,您实际预计会发生什么?
  • 我建议您参加数据库设计课程,而不是回答实际问题。这是保存您尝试存储的数据的一种可怕方式。 重新设计您的数据库 如果您必须创建一个新表来保存长达数年的数据。 你做错了
  • 使用每月的 1 号,而不是 29 号,因为不是每个月都有 29 天....如果您使用每月 31 号作为基准日期,您会2 月、4 月、6 月、9 月和 11 月有问题
  • 你的代码也在尖叫,当你有“编号”变量时,你应该使用数组

标签: php mysql date


【解决方案1】:

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

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

由于我们从每月 1 日开始工作,因此您不会在非闰年的 2 月 29 日、4 月 31 日或任何其他没有 31 天的日子遇到任何问题

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

【讨论】:

  • 我也在尝试这个检查我的代码
  • 我正在尝试请检查此link 谢谢
  • 我已经关注了你的链接,我看到了代码,我看到了输出。有什么问题?
  • 它只添加从日期起 30 天。 2 月不算 28 天
  • 什么?!?该代码为您提供了您最初要求的月份年份显示,它包括 2015 年 2 月,不重复 2015 年 3 月......它不添加天数,它添加了几个月
【解决方案2】:

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

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

感谢大家的帮助...

功劳归于先生。 仁王 个人资料 ID [a link] https://stackoverflow.com/users/153133/crend-king

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

【讨论】:

    猜你喜欢
    • 2022-01-19
    • 1970-01-01
    • 1970-01-01
    • 2012-03-22
    • 1970-01-01
    • 2018-07-31
    • 2011-03-18
    • 1970-01-01
    • 2021-11-25
    相关资源
    最近更新 更多