详解element-ui日期时间选择器的日期格式化问题


Posted in Javascript onApril 08, 2019

最近在做vue+element-ui的后台管理页面,其中用到了DateTimePicker来选择日期时间,但是在将数据传回后台的过程中遇到了一些令人头疼的问题,在此记录一下解决方案,以免日后再次遇到。

详解element-ui日期时间选择器的日期格式化问题

前端页面

前端代码

submitForm(formName) {
        this.$refs[formName].validate((valid) => {
          let url = 'http://localhost:8088/pethospital/order-record'
          let data = qs.stringify({
            title: this.orderForm.title,
            hospitalId: this.orderForm.hospitalId,
            orderDate: this.orderForm.orderDate,
            orderType: this.orderForm.orderType,
            petVariety: this.orderForm.petVariety,
            mobilePhone: this.orderForm.mobilePhone,
            supplement: this.orderForm.supplement
          })
          if (valid) {
            axios.post(url, data)
              .then(response => {
            
              }).catch(error => {
              this.$message({
                message: '错误:' + error,
                type: true
              })
            })
          } else {
            this.$message('验证错误:请确认信息是否填写完整')
          }
        });
      }

实体类代码

private Long id;
private String title;
private Integer hospitalId;
private Date orderDate;
private Integer orderType;
private String petVariety;
private String mobilePhone;
private String supplement;

Controller代码

@PostMapping("/order-record")
  public CommonResult addOrderRecord(OrderRecordDO orderRecordDO) throws ParseException {
    System.out.println("添加的预约记录:" + orderRecordDO);
    orderRecordDOMapper.insertSelective(orderRecordDO);
    return null;
  }

控制台输出

Field error in object 'orderRecordDO' on field 'orderDate': rejected value [2019-04-10 10:00:00]; codes [typeMismatch.orderRecordDO.orderDate,typeMismatch.orderDate,typeMismatch.java.util.Date,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [orderRecordDO.orderDate,orderDate]; arguments []; default message [orderDate]]; default message [Failed to convert property value of type 'java.lang.String' to required type 'java.util.Date' for property 'orderDate'; nested exception is org.springframework.core.convert.ConversionFailedException: Failed to convert from type [java.lang.String] to type [java.util.Date] for value '2019-04-10 10:00:00'; nested exception is java.lang.IllegalArgumentException]]

看了控制台的输出信息,大概知道是前端将日期当做String类型传输的,但是我们后台定义日期用的是Date类型,因此这里报的转换异常。本来我想用SimpleDateFormat来转换的,但是觉得这样很麻烦,然后在网上查找相关资料发现可以有更简单的方法。

尝试1:

在实体类字段上添加@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")

@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
  private Date orderDate;

控制台输出

添加的预约记录:{"id":null,"title":"测试1","hospitalId":1001,"orderDate":"Wed Apr 10 10:00:00 CST 2019","orderType":2001,"petVariety":"哈士奇","mobilePhone":"1000","supplement":"二哈"}

数据库记录

详解element-ui日期时间选择器的日期格式化问题

数据库记录

遇到的问题:从数据库获取数据后在前端显示不友好

详解element-ui日期时间选择器的日期格式化问题

显示

尝试2: 在实体类字段添加@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")和@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")

/**
   * timezone = "GMT+8"指定时区
   */
  @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
  @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
  private Date orderDate;

前端显示效果:这下就能显示成我们想要的效果了

详解element-ui日期时间选择器的日期格式化问题

前端显示

尝试3:我的后台项目使用SpringBoot搭建的,我在application.yml文件中添加如下配置

# 配置数据源
spring:
 datasource:
  name: pet-hospital
  type: com.alibaba.druid.pool.DruidDataSource
  url: jdbc:mysql://localhost:3306/pet_hospital?serverTimezone=GMT%2B8
  driver-class-name: com.mysql.cj.jdbc.Driver
  username: root
  password: 1741248769
 # Vue前端传来的日期为String类型,下面的设置可以自动将其转换为Date类型,不需要手动转换
 mvc:
  date-format: yyyy-MM-dd HH:mm:ss
 # 以下设置可以将Date类型自动转换为如下格式的日期,指定Jackson格式化日期使用的时区,Jackson默认使用UTC
 jackson:
  date-format: yyyy-MM-dd HH:mm:ss
  time-zone: GMT+8

显示效果

详解element-ui日期时间选择器的日期格式化问题

显示

总结:

  • 日期从前端传到后端(添加),由String类型解析成Date类型,从后端传到前端(查询),由Date类型解析成String类型
  • 可以使用注解的方式,@DateTimeFormat、@JsonFormat
  • 可以使用配置文件方式,spring.mvc.date-format、spring.jackson.date-format/time-zone
  • 为什么要设置time-zone?因为Jackson默认使用UTC时区,所以需要手动指定时区为GMT+8

附:原时间2019-04-12 12:00:00,相差8个小时

详解element-ui日期时间选择器的日期格式化问题

不指定时区

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
对YUI扩展的Gird组件 Part-2
Mar 10 Javascript
Javascript Math对象
Aug 13 Javascript
给jqGrid数据行添加修改和删除操作链接(之一)
Nov 04 Javascript
JS获取屏幕,浏览器窗口大小,网页高度宽度(实现代码)
Dec 17 Javascript
Javascript加载速度慢的解决方案
Mar 11 Javascript
极易被忽视的javascript面试题七问七答
Feb 15 Javascript
Bootstrap基本组件学习笔记之input输入框组(9)
Dec 07 Javascript
JS实现简单的二元方程计算器功能示例
Jan 03 Javascript
JavaScript闭包_动力节点Java学院整理
Jun 27 Javascript
VUE axios上传图片到七牛的实例代码
Jul 28 Javascript
vue resource post请求时遇到的坑
Oct 19 Javascript
JavaScript原始值与包装对象的详细介绍
May 11 Javascript
小程序获取当前位置加搜索附近热门小区及商区的方法
Apr 08 #Javascript
服务端预渲染之Nuxt(使用篇)
Apr 08 #Javascript
vue + any-touch实现一个iscroll 实现拖拽和滑动动画效果
Apr 08 #Javascript
面试题:react和vue的区别分析
Apr 08 #Javascript
vue router 组件的高级应用实例代码
Apr 08 #Javascript
JavaScript中的一些实用小技巧总结
Apr 07 #Javascript
详解vue 不同环境配置不同的打包命令
Apr 07 #Javascript
You might like
CI配置多数据库访问的方法
2016/03/28 PHP
PHP实现Session入库/存入redis的方法
2017/05/04 PHP
laravel邮件发送的实现代码示例
2020/01/31 PHP
如何利用PHP实现上传图片功能详解
2020/09/24 PHP
jQuery使用数组编写图片无缝向左滚动
2012/12/11 Javascript
Jquery实现三层遍历删除功能代码
2013/04/23 Javascript
5秒后跳转效果(setInterval/SetTimeOut)
2013/05/03 Javascript
jquery实现table鼠标经过变色代码
2013/09/25 Javascript
javascript不可用的问题探究
2013/10/01 Javascript
js过滤特殊字符输入适合输入、粘贴、拖拽多种情况
2014/03/22 Javascript
解析javascript中鼠标滚轮事件
2015/05/26 Javascript
Backbone View 之间通信的三种方式
2016/08/09 Javascript
JS高级运动实例分析
2016/12/20 Javascript
jQuery中绑定事件bind() on() live() one()的异同
2017/02/23 Javascript
使用vue2.0创建的项目的步骤方法
2018/09/25 Javascript
layui实现左侧菜单点击右侧内容区显示
2019/07/26 Javascript
[10:28]2018DOTA2国际邀请赛寻真——VGJ.S寻梦之路
2018/08/15 DOTA
Python 模拟登陆的两种实现方法
2017/08/10 Python
python 产生token及token验证的方法
2018/12/26 Python
基于python连接oracle导并出数据文件
2020/04/28 Python
3分钟看懂Python后端必须知道的Django的信号机制
2020/07/26 Python
Python3爬虫ChromeDriver的安装实例
2021/02/06 Python
浅谈移动端网页图片预加载方案
2018/11/05 HTML / CSS
购买大码女装:Lane Bryant
2016/09/07 全球购物
英国时尚饰品和发饰购物网站:Claire’s
2017/07/04 全球购物
乌克兰在线商店的价格比较:Price.ua
2019/07/26 全球购物
《卖木雕的少年》教学反思
2014/04/11 职场文书
爱护草坪标语
2014/06/24 职场文书
无房产证房屋转让协议书合同样本
2014/10/18 职场文书
2014年学校体育工作总结
2014/12/08 职场文书
作文批改评语
2014/12/25 职场文书
建筑技术负责人岗位职责
2015/04/13 职场文书
新学期开学标语2015
2015/07/16 职场文书
采购员工作总结范文
2015/08/12 职场文书
Python爬虫实战之爬取京东商品数据并实实现数据可视化
2021/06/07 Python
详解JAVA中的OPTIONAL
2021/06/14 Java/Android