<SELECT NAME="Year">
<option value="2001">2001</option>
<!--
...... 
-->
</SELECT>
<SELECT NAME="Month">
<option value="12">12</option>
<!--
...... 
-->
</SELECT>
<SELECT NAME="Day">
<option value="7">7</option>
<!--
...... 
-->
</SELECT><?$Birthday = $Year."-".$Month."-".$day;

解决方案 »

  1.   

    顺便问个问题:
    $Birthday = $Year."-".$Month."-".$day; 
    如果传来的$Yeat=2001,$Month=2,$day=29 怎么办?有什么办法避免?
      

  2.   

    这个就要用自己写的函数判断了吧`~~我公司的机器上好象就有我自己写的一个Date相关的函数库~~好象以前我也贴过的呀~~而且这种情况最好在第一个页面就用JS避免掉~~
      

  3.   

    <?
    //日期特殊操作控制类
    //宇凡 8月15日
    ?>
    <?
    //获取"YYYY-mm-dd"格式的当前时间
    function NowDate()
    {
    $result = date("Y")."-".date("m")."-".date("d");
    return $result;
    } //获取"YYYY-mm-dd HH:ii:ss"格式的当前时间
    function NowDateTime()
    {
    $result = date("Y")."-".date("m")."-".date("d")." ".date("H").":".date("i").":".date("s");
    return $result;
    } //从"YYYY-mm-dd"格式的时间中提取年
    function GetYear($Date)
    {
    $pos = strpos($Date,"-");
    $result = "";
    for ($i=0;$i<$pos;$i++)
    {
    $result = $result.$Date[$i];
    }
    $month = GetMonth($Date);
    $day = GetDay($Date);
    if (!checkdate($month,$day,$result))
    {
    $result = false;
    }
    return $result;
    } //从"YYYY-mm-dd"格式的时间中提取月
    function GetMonth($Date)
    {
    $pos1 = strpos($Date,"-");
    $pos2 = strrpos($Date,"-");
    $result = "";
    for ($i=$pos1+1;$i<$pos2;$i++)
    {
    $result = $result.$Date[$i];
    }
    $year = GetYear($Date);
    $day = GetDay($Date);
    if (!checkdate($result,$day,$year))
    {
    $result = false;
    }
    return $result;
    } //从"YYYY-mm-dd"格式的时间中提取日
    function GetDay($Date)
    {
    $pos = strrpos($Date,"-");
    $result = "";
    for ($i=$pos+1;$i<10;$i++)
    {
    $result = $result.$Date[$i];
    }
    $year = GetYear($Date);
    $month = GetDay($Date);
    if (!checkdate($month,$result,$year))
    {
    $result = false;
    }
    return $result;
    return $result;
    } //检查闰年,返回布尔值
    function CheckLeap($year)
    {
    $result = (($year % 4 == 0) && (($year % 100 <> 0) || ($year % 400 == 0)));
    return $result;
    }

    //在当前日期上加天数 返回"YYYY-mm-dd"格式的时间
    function AddDay($offset)
    {
    $year=date("Y");
    $month=date("m");
    $day=date("d");
    for ($i=0;$i<$offset;$i++)
    {
    switch ($month) {
    case 1:
    {
    if ($day==31) { 
    $day = 1;
    $month = 2;
    }
    else {
    $day=$day + 1;
    }
    }
    break;
    case 2:
    {
    if (CheckLeap($year)) {
    if ($day == 29) { 
    $day = 1;
    $month = 3;
    }
    else {
    $day=$day + 1;
    }
    }
    else {
    if ($day == 28) { 
    $day = 1;
    $month = 3;
    }
    else {
    $day=$day + 1;
    }
    }
    }
    break;
    case 3:
    {
    if ($day==31) { 
    $day = 1;
    $month = 4;
    }
    else {
    $day=$day + 1;
    }
    }
    break;
    case 4:
    {
    if ($day==30) { 
    $day = 1;
    $month = 5;
    }
    else {
    $day=$day + 1;
    }
    }
    break;
    case 5:
    {
    if ($day==31) { 
    $day = 1;
    $month = 6;
    }
    else {
    $day=$day + 1;
    }
    }
    break;
    case 6:
    {
    if ($day==30) { 
    $day = 1;
    $month = 7;
    }
    else {
    $day=$day + 1;
    }
    }
    break;
    case 7:
    {
    if ($day==31) { 
    $day = 1;
    $month = 8;
    }
    else {
    $day=$day + 1;
    }
    }
    break;
    case 8:
    {
    if ($day==31) { 
    $day = 1;
    $month = 9;
    }
    else {
    $day=$day + 1;
    }
    }
    break;
    case 9:
    {
    if ($day==30) { 
    $day = 1;
    $month = 10;
    }
    else {
    $day=$day + 1;
    }
    }
    break;
    case 10:
    {
    if ($day==31) { 
    $day = 1;
    $month = 11;
    }
    else {
    $day=$day + 1;
    }
    }
    break;
    case 11:
    {
    if ($day==30) { 
    $day = 1;
    $month = 12;
    }
    else {
    $day=$day + 1;
    }
    }
    break;
    case 12:
    {
    if ($day==31) { 
    $day = 1;
    $month = 1;
    $year = $year + 1;
    }
    else {
    $day=$day + 1;
    }
    }
    }
    }
    $result=$year."-".$month."-".$day;
    return $result;
    } //在当前日期上减天数 返回"YYYY-mm-dd"格式的时间
    function AbateDay($offset)
    {
    $year=date("Y");
    $month=date("m");
    $day=date("d");
    for ($i=0;$i<$offset;$i++)
    {
    switch ($month) {
    case 1:
    {
    if ($day==1) { 
    $day = 31;
    $month = 12;
    $year = $year - 1;
    }
    else {
    $day=$day - 1;
    }
    }
    break;
    case 2:
    {
    if ($day == 1) { 
    $day = 31;
    $month = 1;
    }
    else {
    $day=$day - 1;
    }
    }
    break;
    case 3:
    {
    if ($day == 1) {
    if (CheckLeap($year)) {
    $day = 29;
    }
    else {
    $day = 28;
    }
    $month = 2;
    }
    else {
    $day=$day - 1;
    }
    }
    break;
    case 4:
    {
    if ($day == 1) { 
    $day = 31;
    $month = 3;
    }
    else {
    $day=$day - 1;
    }
    }
    break;
    case 5:
    {
    if ($day == 1) { 
    $day = 30;
    $month = 4;
    }
    else {
    $day=$day - 1;
    }
    }
    break;
    case 6:
    {
    if ($day == 1) { 
    $day = 31;
    $month = 5;
    }
    else {
    $day=$day - 1;
    }
    }
    break;
    case 7:
    {
    if ($day == 1) { 
    $day = 30;
    $month = 6;
    }
    else {
    $day=$day - 1;
    }
    }
    break;
    case 8:
    {
    if ($day == 1) { 
    $day = 31;
    $month = 7;
    }
    else {
    $day=$day - 1;
    }
    }
    break;
    case 9:
    {
    if ($day == 1) { 
    $day = 31;
    $month = 8;
    }
    else {
    $day=$day - 1;
    }
    }
    break;
    case 10:
    {
    if ($day == 1) { 
    $day = 30;
    $month = 9;
    }
    else {
    $day=$day - 1;
    }
    }
    break;
    case 11:
    {
    if ($day == 1) { 
    $day = 31;
    $month = 10;
    }
    else {
    $day=$day - 1;
    }
    }
    break;
    case 12:
    {
    if ($day == 1) { 
    $day = 30;
    $month = 11;
    }
    else {
    $day=$day - 1;
    }
    }
    }
    }
    $result=$year."-".$month."-".$day;
    return $result;
    } //获取当前周第一天 返回"YYYY-mm-dd"格式的时间
    function FirstDayOfThisWeek()
    {
    $offset=date("w");
    if ($offset==0)
    {
    $offset=7;
    }
    $offset--;
    $result = AbateDay($offset);
    return $result;
    } //获取当前周最后一天 返回"YYYY-mm-dd"格式的时间
    function LastDayOfThisWeek()
    {
    $offset=date("w");
    if ($offset==0)
    {
    $offset=7;
    }
    $offset = 7 - $offset;
    $result = AddDay($offset);
    return $result;
    }

    //获取指定月的天数
    function DaysAmountOfThisMonth($month,$year)
    {
    switch ($month) {
    case 1:
    $result = 31;
    break;
    case 2:
    {
    if (CheckLeap($year)) {
    $result = 29;
    } else {
    $result = 28;
    }
    break;
    }
    case 3:
    $result = 31;
    break;
    case 4:
    $result = 30;
    break;
    case 5:
    $result = 31;
    break;
    case 6:
    $result = 30;
    break;
    case 7:
    $result = 31;
    break;
    case 8:
    $result = 31;
    break;
    case 9:
    $result = 30;
    break;
    case 10:
    $result = 31;
    break;
    case 11:
    $result = 30;
    break;
    case 12:
    $result = 31;
    break;
    }
    return $result;
    }?>
      

  4.   

    哦,好啊,可是帮忙看看我的程序,那里不对啊?
    function generBirthdayField($name,$label,$explText,$labels,$selected=0,$size=0,$tdCl="", //$name==birthday
    $spanCl="",$value="",$newTr=TRUE)
    {    global $showExplanation,$langTxt;
        $s="";
        if ($newTr) $s.="<tr class=\"$tdCl\">";
        $s.="<td class=\"$tdCl\"><span class='$spanCl'>$label</span>\n";
        if($explText!="" && $showExplanation=="expl_text")
        {
            $s.="<br><span class='explanationText'>$explText</span>";
        }
        if($explText!="" && $showExplanation=="expl_qhelp") {
            $s.=" <img src='i/qhelp.gif' width='15' height='15'".
                " alt=\"$langTxt[quickhelp] : $explText\"".
                " title=\"$langTxt[quickhelp] : $explText\">";
        }
        $s.="</td><td class=\"$tdCl\">\n";
    /*    $s.="<input type='TEXT' name='birthday'";
        $s.="size='10'";
        $s.="maxlength='10'";
        if ($value!="") $s.=" value=\"$value\"";
        $s.="(格式:年/月/日)";
    */原来的程序,直接输入的可以用    global $year,$month,$day;
        $s.="<input type='TEXT' name='year' ";
        $s.=" size=4";
        $s.=" maxlength=4";
        $s.=">\n";
        if ($value!="") $s.=" value=\"$value\"";
        global $birthdayyear;
        if ($value!="") $birthdayyear="$value";
        $s.="年 ";
        $s.="<select name='month' ";
        $s.=">\n";
        $s.="<option value=-1 >  </option>\n";
        $s.="<option value=1 > 一月 </option>\n";
        $s.="<option value=2 > 二月 </option>\n";
        $s.="</select>\n";
        if ($value!="") $s.=" value=\"$value\"";
        $s.="月 ";
        $s.="<select name='day'";
        $s.=">\n";
        $s.="<option value='01' > 01 </option>\n";
        $s.="<option value='02' > 02 </option>\n";
        if ($value!="") $s.=" value=\"$value\"";
        $s.="</select>\n";
        $s.="天\n";
     ---》》   $birthday = $year."-".$month."-".$day;  //这里
    echo $birthday; //确实是那个格式的如:1990-01-01 可是为什么返回的数据中birthday=''啊?
        $s.=" bithday=\"$birthday\"";

        $s.="</td>\n";
        $s.="</tr>\n";
        return $s;
    }
      

  5.   

    数据库里的表
    <?php
    $user_typeInfo =
        array(
     "birthday"=>array(
                    "type"  =>"DATE",
                    "not null",
                    "default"=>""
                ),
    ...
    ),.......
    调用的函数]

      elseif (strstr($val["type"],"DATE")!="")
            {
                 $s.=generBirthdayField($attr,$txt,$expl,$labels,$selected,
                                     0,"forumrow", "listItem");         }

    然后是上面的函数,那里有问题啊?
      

  6.   

    你在拼HTML~~??~~分特~~~$s.=" bithday=\"$birthday\"";这是什么意思?
      

  7.   

    是啊,整个的论坛都是php 拼的,$s.=" bithday=\"$birthday\"";没什么意思,就是想返回的值属性变成
    bitthday='..' 可是还是不行 ,怎么回事啊?
      

  8.   

    是这样的,都是这么拼的啊。
    function generBirthdayField() 返回的值是$s
    就是拼的网页生日选项,
    elseif (strstr($val["type"],"DATE")!="")-------------就是如果属性是DATE,那么就调用这个函数
            {
    就是这个啊》》            $s.=generBirthdayField$attr,$txt,$expl,$labels,$selected,
                                    0,"forumrow", "listItem");        }
    这是一个函数generform()中的,所有的表都是由他生成的,就是说对每一个表项的属性
    是生成表的所有类型比如"enum"\"text'.. 都对应在这个函数中生成的,
    比如是 “date" 那么就 if attribut ='date' then 调用这个生日函数
    然后返回这个生日表格选项,我的解释清楚吗?
      

  9.   

    然后根据不同的类型生成表,返回就是拼的网页,然后根据不同的’名字‘,因为每个
    网页上的表个都有自己的名字,比如 name=birthday,那么传回数据库中的值就是
    birthday='..',,就象我上面写的,那个能用的
      。。
        $s.="<input type='TEXT' name='birthday'";
        $s.="size='10'";
        $s.="maxlength='10'";
        if ($value!="") $s.=" value=\"$value\"";
        $s.="(格式:年/月/日)";
    。。
    那么返回数据库中的值就是 birthday='value',也就是你输入的值,但是换成了三个
    year\month\day 后,返回的就是year=\month=\day=\ 但是数据库中没有这三个表象,只有
    birthday ,所以他们添不进去,birthday返回的值总是birthday='' 就是默认的0000-00-00
    不知道是为什么?
      

  10.   

    没有啊,其实也不是那么复杂,我觉得这样更能体现程序的可扩展形,这样做的好处就是如果你想
    再加什么信息进去,比如text,那么只要在数据库里定义一个表那么其他的就不用管了,因为
    text这个表的函数已经有了,只要直接调用就好了,你说呢?