jsp时间标签时间限制

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页面修改datetime格式
  • 除此之外, 这篇博客: 解决SSM框架jsp页面中 input 的datetime-local类型传值到后端数据类型不匹配问题中的 因此可以采用以下方法解决: 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    第一步:修改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属性的属性值直接与实体类中的属性名对应即可(框架自动封装。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^