最近在写常用的用户操作日志在前端显示的问题,要对用户的操作时间进行分时间段的查找和筛选,出现了时间比较时格式不统一的问题
在前端写了两个日期选择器,定义了一个初始时间和结束时间
<el-date-picker
v-model="dataFilter.stratDate"
type="date"
:picker-options="dataFilter.stratDate"
placeholder="选择日期"
value-format="yyyy-MM-dd"
@change="eventSearch">
</el-date-picker>
<span>至</span>
<el-date-picker
v-model="dataFilter.endDate"
type="date"
:picker-options="dataFilter.endDate"
value-format="yyyy-MM-dd"
placeholder="选择日期"
@change="eventSearch">
</el-date-picker>
dataFilter:{
stratDate:"",
endDate:"",
},
效果如图:
所以在这里请求后台接口传的参数时是字符串类型,而在数据库中createTime的类型是datetime
类型不统一 ,就无法进行时间的比较,所以需要在后台代码中对传过去的startDate和endDate用SimpleDateFormat将字符串类型转换成和数据库一致的时间类型
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
private String startDate;
private String endDate;
public String getStartDate() {
return startDate;
}
public void setStartDate(String startDate) {
this.startDate = startDate;
}
public String getEndDate() {
return endDate;
}
public void setEndDate(String endDate) {
this.endDate = endDate;
}
时间比较:
if (getStartDate()!=null) {
try {
rule.add(Restrictions.ge("createTime", sdf.parse(getStartDate())));
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if (getEndDate()!=null) {
try {
rule.add(Restrictions.le("createTime", sdf.parse(getEndDate())));
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
此时时间比较依旧报错,仔细查看后发现前台传的格式是yyyy-MM-dd,时间格式是yyyy-MM-dd HH:mm:ss,所以需要在前端请求接口时穿的参数需要加上HH:mm:ss
const params = new FormData();
var dateStart = this.dataFilter.stratDate == null ? "" : this.dataFilter.stratDate;
var dateEnd = this.dataFilter.endDate == null ? "" : this.dataFilter.endDate;
params.append("dateFrom", dateStart== ''?'': dateStart+" 00:00:00");
params.append("dateTo", dateEnd==''?'': dateEnd+ " 23:59:59");
如此时间筛选就好用了,筛选效果图涉及内容较多,所以就不粘贴了