Date类型的数据从后端传到前端之后变成了long类型的时间戳形式,不是按照日期、时间的格式显示,因此需要将时间戳转成正常的时间格式。
网上提到比较多的方法是利用fmt标签来进行转换。
首先引入标签库如下:
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
然后在jsp页面类似下面这样进行转换:
<jsp:useBean id="Timestamp" class="java.util.Date"/>
<c:set target="${Timestamp}" property="time" value="${obj.timestamp}"/>
<fmt:formatDate pattern="yyyy-MM-dd HH:mm:ss" value="${Timestamp}" type="both"/>
但是按照上面的方法尝试之后,发现时间戳确实转换成了日期,但是日期一直是1970-1-1。
根据在网上查找的资料,提到比较多的是说时间戳是有单位的:
单位为秒时,时间戳为10位,例如1574741563
单位为毫秒时,时间戳为13位,例如1574741563000
js里的new Date()方法默认是将毫秒(ms)为单位的时间戳转换为时间,将10位的时间戳乘以1000转换为13位的时间戳就可以正确转换了
但是看了下前端接收到的时间戳值已经是13位的,所以尝试了这种方式也没能解决问题。
最后只能利用该时间戳的值新建一个Date类型的变量,然后依次获取这个Date类型变量的年份、月份和日期,利用字符串拼接得到所需要的日期形式。类似下面这样:
//将3个时间戳转成字符串形式
var borrowtime=new Date(item.borrowDate);
borrowtime=borrowtime.getFullYear()+"-"+(borrowtime.getMonth()+1)+"-"+borrowtime.getDate();