目录
一、最近做了什么?
主要记录一下四月底到五月初做了什么,以及遇到的一些问题。
这段时间主要还是用户端的前端书写和后端逻辑的书写。我主要负责用户端申请信息的展示以及申请详情的展示。
前端涉及从数据库提取timestamp类型的申请失效时间和前端获取的Date类型的当前时间的比较,之后进行下一步的逻辑判断和操作。
所以下面讲一下时间比较的方法。
二、遇到的问题和解决办法
1.axios获取到数据库里的失效时间类型
获取到的timestamp类型格式:
即:yyyy-MM-dd'T'HH:mm:ss.SSSXXX
2.前端获取到的Date()类型当前时间类型
3.前后端时间类型统一转换成yyyy-MM-dd HH:mm:ss格式
为了方便毫秒级比较,所以两者都转换成yyyy-MM-dd HH:mm:ss格式
后端转换方法,即yyyy-MM-dd'T'HH:mm:ss.SSSXXX到yyyy-MM-dd HH:mm:ss方法代码如下:
renderTime(date){
var dateee = new Date(date).toJSON();
return new Date(+new Date(dateee) + 8 * 3600 * 1000).toISOString().replace(/T/g, ' ').replace(/\.[\d]{3}Z/, '')
},
前端转换方法,即Date()到yyyy-MM-dd HH:mm:ss方法代码如下:
dateFormat(date){
console.log("当前时间转换前:"+ date);
let y = date.getFullYear()
let m = date.getMonth() + 1
m = m < 10 ? ('0' + m) : m
let d = date.getDate()
d = d < 10 ? ('0' + d) : d
let h =date.getHours()
h = h < 10 ? ('0' + h) : h
let M =date.getMinutes()
M = M < 10 ? ('0' + M) : M
let s =date.getSeconds()
s = s < 10 ? ('0' + s) : s
let dateTime= y + '-' + m + '-' + d + ' ' + h + ':' + M + ':' + s;
console.log("当前时间转换后:"+ dateTime);
return dateTime;
},
4.yyyy-MM-dd HH:mm:ss格式的时间比较
这里利用了Date.parse()方法。
Date.parse()方法用于分析一个包含日期的字符串,并返回该日期与 1970 年 1 月 1 日午夜之间相差的毫秒数。
字符串是有规则要求的。如下(借鉴了一些资料和大佬的博客):
- 短日期可使用/日期分隔符,但是必须符合月/日/年的格式,例如7/20/96或6/15/2008。
- 以July 10 1995形式表示的长日期中的年、月、日可以按任何顺序排列,而且年份可以用2位数或4位数的形式表示。如果使用2位数的形式来表示年份,则该年份必须大于或等于 70。
- 括号中的任何文本都被视为注释。这些括号可以嵌套。
- 逗号和空格被视为分隔符。允许使用多个分隔符。
- 月和日的名称必须具有两个或两个以上的字符。如果两个字符所组成的名称不唯一,则该名称将解析为最晚的一个匹配日期。例如,Ju解析为七月(July),而不是六月(June)。Chrome不支持"Ju"这种写法。
- 如果提供一个日期,该日期中所说明的星期数与根据此日期中其他部分所确定的星期数不相符,则此日期中的星期数将被忽略。例如,尽管 1996 年 11 月 9 日实际上是星期五,但Tuesday November 9 1996还是可以被接受并进行分析。但是结果的 Date 对象中包含的是Friday November 9 1996。
- JavaScript处理所有的标准时区,以及协调通用时间 (UTC) 和格林威治标准时间 (GMT),例如:Thu, 07 Aug 2014 11:00:14 GMT。IE6 ~ IE8对UTC格式的支持程度非常低,IE9的支持也不全面。
- 用冒号分隔小时、分钟和秒,但所有这些内容并非都需要指定。10:、10:11和10:11:12都是有效的。
- 若使用的时钟是 24 小时计时的,那么将中午 12 点之后的时间指定为PM是错误的。例如,23:15 PM就是错误的。
- 包含无效日期的字符串是错误的。例如,一个包含两个年份或两个月份的字符串是错误的。
根据规则,将yyyy-MM-dd HH:mm:ss转换成MM-dd-yyyy HH:mm:ss格式代码如下:
compareDate(date1,date2){
var startDate = date1.substring(0,10).split('-');//当前时间
var endDate = date2.substring(0,10).split('-');//失效时间
var startNum = startDate[1]+'-'+startDate[2]+'-'+startDate[0]+' '+date1.substring(10,19);
var endNum = endDate[1]+'-'+endDate[2]+'-'+endDate[0]+' '+date2.substring(10,19);
var disparityTime =(Date.parse(endNum)-Date.parse(startNum))/3600/1000; //失效时间-当前时间
if(Number(disparityTime)<0){
console.log("失效时间小于当前时间");
return true;//已失效
}else{
console.log("失效时间大于当前时间");
return false;//未失效
}
},