【问题标题】:Convert HTML form input into date php understands将 HTML 表单输入转换为 php 理解的日期
【发布时间】:2026-02-09 16:25:01
【问题描述】:

我正在寻找一种方法,让访问我网站的人通过 HTML 表单输入日期,然后使用 php 从他们输入的日期减去或增加时间。例如,在表单中他们将输入生日我希望 php 在他们生日后 5 天回显。我已经研究了许多在 php 中添加日期的方法,所以我认为这不会是一个问题。我只是不知道如何让 php 将表单输入识别为日期。

这是我选择日期的 HTML 代码:

<select name="DMonth" input type="number">
    <option>- Select Month -</option>
    <option value=1>January</option>
    <option value=2>February</option>
    ...
    <option value=12>December</option>
</select>
<select name="DDay" input type="number">
<option>- Select Day -</option>
    <option value=1>1</option>
    <option value=2>2</option>
    ...
    <option value=31>31</option>
</select>
<select name="DYear" input type="number">
    <option>- Select Year -</option>
    <option value=2013>2013</option>
    <option value=2014>2014</option>
    ...
    <option value=2022>2022</option>
</select><br>
<select name="DHour" input type="number">
<option>- Select Hour -</option>
<option value=00>12 a.m.</option>
<option value=01>1 a.m.</option>
<option value=02>2 a.m.</option>
<option value=03>3 a.m.</option>
<option value=04>4 a.m.</option>
<option value=05>5 a.m.</option>
<option value=06>6 a.m.</option>
<option value=07>7 a.m.</option>
<option value=08>8 a.m.</option>
<option value=09>9 a.m.</option>
<option value=10>10 a.m.</option>
<option value=11>11 a.m.</option>
<option value=12>12 p.m.</option>
<option value=13>1 p.m.</option>
<option value=14>2 p.m.</option>
<option value=15>3 p.m.</option>
<option value=16>4 p.m.</option>
<option value=17>5 p.m.</option>
<option value=18>6 p.m.</option>
<option value=19>7 p.m.</option>
<option value=20>8 p.m.</option>
<option value=21>9 p.m.</option>
<option value=22>10 p.m.</option>
<option value=23>11 p.m.</option>
</select>
<select name="DMin" input type="number">
<option>- Select Minute -</option>
<option value=0>00</option>
<option value=15>15</option>
<option value=30>30</option>
<option value=45>45</option>
</select>

这就是我认为我会在 php 中使用的内容

$DMonth=$_POST["DMonth"];
$DDay=$_POST["DDAY"];
$DYear=$_POST["DYear"];
$DHour=$_POST["DHour"];
$DMin=$_POST["DMin"];
$Bday = date_create($DYear.'-'.$DMonth.'-'.$DDay.' '.$DHour.':'.$DMin.':00');
echo date_format($Bday, 'Y-m-d H:i:s');

但是当我运行表单时,它唯一回显的是当前日期和时间。

【问题讨论】:

    标签: php html datetime


    【解决方案1】:

    几小时和几分钟都看不到你的代码

    这有点令人费解,因为它是您代码的插件,但可以解决问题。

    $DMonth=$_POST["DMonth"];
    $DDay=$_POST["DDAY"];
    $DYear=$_POST["DYear"];
    $DHour=$_POST["DHour"];
    $DMin=$_POST["DMin"];
    $Bday = date_create($DYear.'-'.$DMonth.'-'.$DDay.' '.$DHour.':'.$DMin.':00');
    echo date_format($Bday, 'Y-m-d H:i:s');
    
    $datetime = new DateTime(date_format($Bday, 'Y-m-d H:i:s'));
    $datetime->modify('+5 days');
    echo $datetime->format('Y-m-d H:i:s');
    

    更简单的版本

    $datetime = DateTime::createFromFormat('Y-n-j H:i', $DYear.'-'.$DMonth.'-'.$DDay.' '.$DHour.':'.$DMin);
    echo $datetime->format('Y-m-d H:i:s'); // Birthday
    $datetime->modify('+5 days');
    echo $datetime->format('Y-m-d H:i:s'); // 5 days later
    

    【讨论】:

    • 好的,当我运行它时,它说 echo $datetime('Y-m-d H:i:s');是一个致命错误:函数名必须是字符串。
    • 对不起。我完全遗漏了代码的重要部分。立即尝试。
    • 感谢您的帮助。使用新代码,它现在只显示为从当前日期算起 5 天,而不是输入日期。
    • 确保从表单中获取所有正确的值。我几个小时和几分钟都没有看到任何东西,但是您的 PHP 代码提到了它。如果它不是真的存在,那将导致问题。
    • 对不起。在将值更正为我的版本中的值之前,我复制了代码。我在上面编辑了你的,以反映我现在的工作。
    【解决方案2】:

    怎么样...

    $datetime= mktime($DHour, $DMin, 0, $DMonth, $DDay, $DYear);
    

    ?

    更多信息请参见the mktime help page - 无需构建字符串或担心格式,只需提供适当的参数名称Hour, Minute, Second, Month, Day, Year

    您的 html 中也存在一些问题。选择的语法如下:

    <select name="DYear">
        <option>- Select Year -</option>
        <option value="2013">2013</option>
    

    请注意,&lt;select&gt; 没有input,并且值用引号括起来。也无需指定type="number"。要正确地将值转换为整数而不是字符串,请在您的 PHP 中执行此操作:

    $DYear = (int) $_POST["DYear"];
    

    【讨论】:

    • 我在上述方法之前尝试过这个,但每当我尝试回显时,它仍然返回当前时间(在 Unix 中)。
    • @AnnHolley 然后我怀疑你在其他地方遇到了问题,我向你保证mktime() 有效。请参阅codepad.org/zKjz2Eey 我已经为您的 html 添加了一些修复程序,这可能会有所帮助