jsp中input的datetime-local时间标签只让选择半点或整点怎么实现
用JS 处理一下
<form action="your-action" method="post">
<label for="datetime">选择时间:</label>
<input type="datetime-local" id="datetime" name="datetime" required>
<script>
// 获取时间选择器元素
var datetime = document.getElementById("datetime");
// 监听时间选择器变化事件
datetime.addEventListener("input", function() {
// 获取当前时间
var date = new Date(datetime.value);
// 只允许选择半点或整点
if (date.getMinutes() % 30 !== 0) {
// 如果不是半点或整点,将时间设置为最接近的半点或整点
var minutes = Math.round(date.getMinutes() / 30) * 30;
date.setMinutes(minutes);
datetime.value = date.toISOString().slice(0, 16);
}
});
</script>
<button type="submit">提交</button>
</form>
不知道你这个问题是否已经解决, 如果还没有解决的话:第一步:修改JSP页面
由于当input中name的属性值名字与实体pojo中的属性名一致的时候,SSM框架会帮我们自动封装对象。我们可以采取手动封装,所以我们这里的name属性中的属性值不与pojo实体类中的属性名一致。
<%此处只列举核心部分%>
<td>开单时间:</td>
<td><input type="datetime-local" step="1" name="cTime"/></td>
<td>结账时间:</td>
<td><input type="datetime-local" step="1" name="eTime"/></td>
第二步:修改Conteller
我们从JSP页面中根据刚才的属性值把内容取出,然后进行字符串截substring(起始位值,结束位置),把“T”去掉,再把年月日时分秒重新合并成新的字符串。接着按照要求把这两个字符串类型的变量转换成Date类型再封装到实体对象中。另外也可以直接用字符串的replaceAll(“要被替换的字符”,“替换成什么”)方法来把T替换成空格。
//此处只列举核心部分 代码不全
@RequestMapping("/addOrder")
public String doInsert(Order order,Model model,String cTime,String eTime) throws ParseException {
cTime=cTime.substring(0,10)+" "+cTime.substring(11,19);//截取方法
eTime=eTime.replaceAll("T", " ");//替换方法
order.setCreateTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(csTime));
order.setEndTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(eTime));
/*其余基础操作代码此处略*/
}
实体类Order相关Date日期类型属性要使用注解 @DateTimeFormat
public class Order {
private Integer orderId;
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTime;
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date endTime;
//此处get set 和toString 方法不列举 但要写
}
如果input使用date类型就不会出现上述错误,此时name属性的属性值直接与实体类中的属性名对应即可(框架自动封装。