0

我正在尝试使用 PHP 编写代码以启用对闰年友好的选择选项标签。例如,您选择一年,然后它会检查它是否是闰年,然后它会显示一个下拉菜单(选择选项标签),前面是另一个选择 12 个月的选项标签。PHP 代码嵌入在 HTML 中。这是我失败的尝试(我是 PHP 新手):

<form method="post">    
<select name="year">
 <option value="" selected>Pick a year</option><!--Default-->
 <option value="2016">2016</option>
 <option value="2017">2017</option>
 <option value="2018">2018</option>
 <option value="2019">2019</option>
 <option value="2020">2020</option>
</select>
<select name="month">
 <option value="" selected>Pick a month</option><!--Default-->
 <!--Show all 12 months-->  
 <?php for( $i = 1; $i <= 12; $i++ ): ?>
 <option value="<?php echo $i; ?>"><?php echo $i; ?></option>
 <?php endfor; ?>
</select>
<select name="day">
 <option value="" selected>Pick a day</option><!--Default-->
 <!--Show dates depending on the conditions below:-->
 <?php
 if ( $month == 1 || 3 || 5 || 7 || 8 || 10 || 12 )
 {
    //Show dates until 31
    for ( $i = 1; $i <= 31; $i++ )
    {
 ?>
 <option value="<?php echo $i; ?>"><?php echo $i; ?></option>
 <?php
    }
 }
 elseif ( $month == 2 )
 {
    //Leap year
    if ( $year != "" && $year % 4 == 0 && $year % 100 == 0 && $year % 400 == 0 )
    {
        //Show dates until 29
        for ( $i = 1; $i <= 29; $i++ )
        {
            ?>
            <option value="<?php echo $i; ?>"><?php echo $i; ?></option>
            <?php
        }
    }
    //Regular year (Non-leap year)
    else 
    {
        //Show dates until 28
        for ( $i = 1; $i <= 28; $i++ )
        {
            ?>
            <option value="<?php echo $i; ?>"><?php echo $i; ?></option>
            <?php
        }
     }
}
elseif ( $month == 4 || 6 || 9 || 11 )
{
    //Show dates until 30
    for ( $i = 1; $i <= 30; $i++ )
    {
        ?>
        <option value="<?php echo $i; ?>"><?php echo $i; ?></option>
        <?php
    }
 }
?>
</select>
<input type="submit" value="submit">
</form>

笔记:

我了解以上是不完整的代码,它不起作用。此外,我不知道如何从选择标签中定义$year或。我应该这样做吗?如果是这样,我应该把它放在哪里?$month$day

<?php 
if( $_SERVER["REQUEST_METHOD"] == "POST" )    
{
    $year = $_POST['year'];
    $month = $_POST['month'];
    $day = $_POST['day'];

    //The rest of the php code?
}
?>

最好,我不想通过使用for循环来显示年数,如月数和日数。这次我想手动完成(对不起,但如果你建议我应该使用for循环,我很感激你的建议)。

我写$year =! ""在闰年二月if块,因为我想避免空的默认值被计算。

我热烈欢迎您的建议和更正,请帮助我:)

提前致谢!

4

2 回答 2

0

据我所知闰年:

/**
 * In the Gregorian calendar 3 criteria must be taken into account to identify leap years:
 *  1. The year is evenly divisible by 4;
 *  2. If the year can be evenly divided by 100, it is NOT a leap year, unless;
 *  3. The year is also evenly divisible by 400. Then it is a leap year.
 *
 * @param $year integer
 * @return bool
 */
private static function isLeapYear($year)
{
    // the rule was applied after 1582
    if ($year > 1582) {
        if (($year % 400 == 0 && $year % 100 != 0) || ($year % 4 == 0))
        {
            //"It is a leap year"
            return true;
        }
        else
        {
            return false;
            //"It is not a leap year"
        }
    }
    return false;
}
于 2016-05-12T16:38:02.010 回答
0

这不起作用:

( $month == 1 || 3 || 5 || 7 || 8 || 10 || 12 )

这只会检查$month == 1,然后其他条件将被评估为真,因为整数被评估为true(并且 PHP 无法使用此代码将变量与布尔值进行比较)。

看起来您正在尝试获取每月的天数。这可以DateTime::Format()使用以下date()格式轻松完成:

t返回给定月份的天数

$dt = new Datetime('2016-02-15');
print $dt->format('t');
// display "29"

例子

L1如果一年是闰年,则返回,0否则:

$dt = new Datetime('2016-02-15');
print $dt->format('L');
// display "1"
$dt = new Datetime('2015-02-15');
print $dt->format('L');
// display "0"

例子

您可能不应该关心输入并显示所有年份,每月 12 个月和 31 天,并checkdate()在提交数据后检查日期。

于 2016-05-12T16:44:26.463 回答