You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:04:45