如何使$date显示在输入 type=“date” 上

How to make $date show on input type="date"

提问人:user2741620 提问时间:1/3/2023 更新时间:1/4/2023 访问量:335

问:

我数据库中的所有“日期”都采用以下格式:“d-m-Y”(例如 09-03-2022)

我想要一个输入类型=日期的字段,以便用户可以修改日期。

我使用以下代码来拉取数据:

$date      = "<input type=\"date\" id=\"date\" size= \"50%;\" name=\"date\" value=\"$res[date]\" >";

...
<thead> <th>Date </th> <td>$date </td> </thead>

但是我的输入框显示 dd/mm/yyyy 而不是实际日期。

enter image description here

我需要做什么格式才能使我的实际日期显示在输入框上?

我尝试了以下方法,但没有用:

$date      = "<input type=\"date\" id=\"date\" size= \"50%;\" name=\"date\" value=\"date('d-m-Y',$res[date])\" >";
PHP 日期 输入

评论

1赞 M. Eriksson 1/3/2023
您发布的代码的结果是什么?第一个(第二个不起作用,因为你不能把PHP函数放在这样的字符串中。您需要在添加日期之前设置日期的格式,为什么不将其格式设置为与预期相同的格式(使用 / 而不是 -)?右键单击页面,然后单击“查看页面源代码”。旁注:“我数据库中的所有”日期“都采用以下格式:'d-m-Y'(例如 09-03-2022)” - 这不是存储日期的好方法。存储日期时,在数据库中将该列设置为“日期”类型,该数据库要求日期的格式为 。Y-m-d
0赞 Juan 1/3/2023
为什么要将“输入”字段的 HTML 存储在变量中...?您可以像这样将数据库中的日期与 HTML 连接起来<thead> <th>Date </th><td><input type="date" id="date" size="50%;" name="date" value="<? echo $res[date]; ?>"></td> </thead>
1赞 brombeer 1/3/2023
日期输入的值必须为 YYYY-MM-DD 格式(或为空)
2赞 ADyson 1/3/2023
All the "date" in my database are of the following format: 'd-m-Y' (E.g. 09-03-2022)...为什么要将日期作为文本存储在数据库中?这是一个糟糕的设计错误。使用 DATE 或 DATETIME 列类型,这就是它的用途。日期不是字符串(除非您向人类展示它们或序列化它们以进行传输)。您当前的存储格式使得无法按日期正确比较、排序或筛选数据库行,并且 - 正如您发现的那样 - 更难以以有用的方式提取日期信息以供在其他地方使用。
1赞 ADyson 1/3/2023
无论如何,developer.mozilla.org/en-US/docs/Web/HTML/Element/input/date 非常清楚地表明,该属性必须是序列化为 YYYY-MM-DD 格式的日期。目前尚不清楚您为什么尝试使用 d-m-Y,或者为什么您不知道该使用哪种格式。请务必阅读手册。value

答:

0赞 Mohammad Salehi 1/3/2023 #1

您向日期输入传递了错误的格式。 日期输入必须填写格式化文本RFC3339您可以阅读更多相关信息。

要将当前格式更改为格式,可以使用以下代码:Y-m-d

DateTime::createFromFormat('d-m-Y', $dateInput)->format('Y-m-d');

如果您使用的是MySQL,则它使用日期类型列的格式,因此,使用从PHP到MySQL字段保存日期似乎是正确的方法。YYYY-MM-DDY-m-ddate

评论

0赞 user2741620 1/4/2023
谢谢。经过大量测试,我能够让以下代码工作:$date 1 = date_create(“$res[date]”);$date 2 = date_format($date 1,“Y-m-d”);$date = “<input type=\”date\“ ...值=\“$date 2\” >“;
0赞 user2741620 1/4/2023 #2

所以我相信日期没有显示在我的输入字段上的原因是因为它采用 String 数据类型并且需要格式化为 DATE。

$date1  =   date_create("$res[date]");
$date2  =   date_format($date1,"Y-m-d");
$date   = "<input type=\"date\" id=\"date\" size= \"50%;\" name=\"date\" value=\"$date2\" >";

有了这个,我也可以为《时代》做同样的事情

$time1  =   date_create("$res[time]");
$time2  =   date_format($time,"H:i:s");
$time   = "<input type=\"time\" id=\"time\" size= \"50%;\" name=\"time\" value=\"$time2\" >";

评论

0赞 Mohammad Salehi 1/4/2023
如果答案解决了您的问题,请将您的答案标记为“已接受的答案”。
1赞 Juan 1/4/2023
你回答你的问题“相信原因就是这样”,但这些迹象表明我们中的许多人在他的回答中都给出了评论和@MohammadSalehi,不......?