JS中转换时间戳为日期:JWT过期日期校验异常求助
解决JWT令牌exp字段转换为正确日期的问题
嘿,我来帮你搞定这个JWT过期日期的坑!你遇到的问题其实很常见——JWT的exp字段是秒级的Unix时间戳,但JavaScript的Date构造函数只认毫秒级时间戳,直接用的话肯定会得到错误的日期。
先给你验证一下:你提供的1522210228乘以1000后是1522210228000,把这个丢进new Date()里,就能得到你要的「2018年3月28日星期三00:10:28」啦!
针对你用的两个库,分别给你调整后的正确代码:
1. 使用angular2-jwt的JwtHelperService
其实这个库已经封装好了获取过期日期的方法,不用自己去解码后处理exp字段,直接用getTokenExpirationDate就行:
const helper = new JwtHelperService(); // 直接传入令牌,获取正确的Date对象 const expirationDate = helper.getTokenExpirationDate(this.authentificationInfos.token); // 转成你需要的可读格式(比如中文格式) console.log(expirationDate.toLocaleString('zh-CN', { year: 'numeric', month: 'long', day: 'numeric', hour: '2-digit', minute: '2-digit', second: '2-digit', weekday: 'long' }));
2. 使用jwt-decode
如果用这个库手动解码,记得把exp乘以1000转成毫秒级时间戳再创建Date:
import jwtDecode from 'jwt-decode'; const decodedToken = jwtDecode(this.authentificationInfos.token); // 关键:将秒级时间戳转成毫秒级 const expirationDate = new Date(decodedToken.exp * 1000); // 同样格式化输出 console.log(expirationDate.toLocaleString('zh-CN', { year: 'numeric', month: 'long', day: 'numeric', hour: '2-digit', minute: '2-digit', second: '2-digit', weekday: 'long' }));
下次遇到时间戳相关的问题,先确认是秒级还是毫秒级,这个细节很容易踩坑哦!
内容的提问来源于stack exchange,提问作者Vince
相关产品推荐
相关产品推荐

