如何将SQLServer的datetime数据赋值给datetime-local输入框
问题原因
- HTML标准中
datetime-local类型的输入框对value属性的格式有严格要求,必须为日期T时间的格式,其中日期为YYYY-MM-DD,时间为HH:mm(也可扩展为HH:mm:ss),日期和时间之间用大写字母T连接,不允许使用空格分隔,也不能携带毫秒后缀。 - 你从SQL Server取出的时间格式为
2021-08-10 23:59:00.000,不符合上述格式要求,因此浏览器无法识别,输入框就会显示为空。
解决方案
只需要在输出到value属性前,用PHP把数据库取出的时间转换为符合要求的格式即可,提供两种常用实现方式:
- 用date+strtotime快速转换
代码如下:
<?php echo date('Y-m-d\TH:i', strtotime($row['DurationStart'])); ?>
注意:原代码中$row[DurationStart]缺少数组键的引号,修正为$row['DurationStart']可避免PHP抛出未定义常量的警告。
- 用DateTime类实现(兼容性更强,避免特殊时间格式下strtotime解析失败)
代码如下:
<?php $startTime = new DateTime($row['DurationStart']); echo $startTime->format('Y-m-d\TH:i'); ?>
修改后的完整input标签代码:
<input type="datetime-local" id="dateStart" name="dateStart" value="<?php $startTime = new DateTime($row['DurationStart']); echo $startTime->format('Y-m-d\TH:i'); ?>">
补充说明
- 如果你的业务需要保留秒级精度,可以把格式字符串改为
Y-m-d\TH:i:s,主流现代浏览器都支持该格式。 - 若存在时区差异,可在格式化前调用
DateTime::setTimezone()方法调整到对应时区即可。
内容的提问来源于stack exchange,提问作者Amenadiel
相关产品推荐
相关产品推荐

