当前位置: 首页 > 知识库问答 >
问题:

在JS中将勾号转换为日期

巴星华
2023-03-14

我试图检查JWT令牌的到期日,我所做的一切都没有给我正确的日期。

"exp": 1522210228 => real answer => Wednesday, March 28, 2018 12:10:28 AM

我试过那些libs,但没有成功...

  1. https://github.com/auth0/angular2-jwt/blob/master/src/jwthelper.service.ts
const helper = new JwtHelperService();
const decodedToken = helper.decodeToken(this.authentificationInfos.token);
const expirationDate = helper.getTokenExpirationDate(this.authentificationInfos.token);

console.log(expirationDate); => null?
import * as decode from 'jwt-decode';

const token = decode<{ data: { exp: number, iat: number, iss: string, nbf: number, username: string } }>(this.authentificationInfos.token);
const date = new Date(token.data.exp);
console.log(date); => Sun Jan 18 1970 09:50:10 GMT-0500 (Eastern Standard Time)

const d = new Date(0);
d.setUTCMilliseconds(token.data.exp);
console.log(d); => Sun Jan 18 1970 09:50:10 GMT-0500 (Eastern Standard Time)

以下是完整的令牌:

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJkYXRhIjp7InVzZXJuYW1lIjoiYmlsb2RlYXV2aW5jZW50QG91dGxvb2suY29tIiwiaWF0IjoxNTIyMjA2NjI4LCJpc3MiOiJtbnAuY29tIiwibmJmIjoxNTIyMjA2NjI4LCJleHAiOjE1MjIyMTAyMjh9fQ.1WRlQatauXw2HEWj9B9VL6fIVR-4nAoKuWvkS4_m86k

https://jwt.io/正在解码令牌,并且显示的exp正确。

如何从token获取真实日期。经验?

共有3个答案

慕佑运
2023-03-14
import jwt_decode from 'jwt-decode';

const token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IllvIiwiZXhwIjoxNTE2MjM5MDIyfQ.9xA3RWBjEdQmUFlf5E7fLrR8Xi36ogcjGrOdkL6DA3Y"
let _expData = jwt_decode(token || '{}')
let _exp = token.exp * 1000
let _date = new Date(_exp)
console.log(_date)
李兴为
2023-03-14

因为它是从历元开始的秒数,所以您所要做的就是将exp乘以1000。

请参阅下面的演示。

const jwt = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IllvIiwiZXhwIjoxNTE2MjM5MDIyfQ.9xA3RWBjEdQmUFlf5E7fLrR8Xi36ogcjGrOdkL6DA3Y";

const decodedJwt = jwt_decode(jwt);

console.log( new Date(decodedJwt.exp * 1000) );

// output: "2018-01-18T01:30:22.000Z"
html lang-html prettyprint-override"><script src="https://unpkg.com/jwt-decode@3.1.2/build/jwt-decode.js"></script>
崔单弓
2023-03-14

JWT中的时间戳是从01.01.1970 00:00UTC开始计数的UNIX时间戳:https://www.rfc-editor.org/rfc/rfc7519#section-4.1.4解释了用于exp声明(以及nbf(之前没有)和iat(在)声明)的数字日期

https://www.rfc-editor.org/rfc/rfc7519#section-2定义数字日期:

JSON数值,表示从1970-01-01T00:00:00Z UTC到指定的UTC日期/时间的秒数,忽略飞跃秒。

var jwtDecode = require('jwt-decode');
var jwt = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJkYXRhIjp7InVzZXJuYW1lIjoiYmlsb2RlYXV2aW5jZW50QG91dGxvb2suY29tIiwiaWF0IjoxNTIyMjA2NjI4LCJpc3MiOiJtbnAuY29tIiwibmJmIjoxNTIyMjA2NjI4LCJleHAiOjE1MjIyMTAyMjh9fQ.1WRlQatauXw2HEWj9B9VL6fIVR-4nAoKuWvkS4_m86k";

const token = jwtDecode(jwt);
const d = new Date(0);
d.setUTCSeconds(token.data.exp);
console.log(d);

输出:

2018-03-28T04:10:28.000Z

使用d.get小时()d.get分钟()等获取本地时间。

 类似资料:
  • 问题内容: 有谁知道如何将JS dateTime转换为MySQL datetime?还有一种方法可以向JS日期时间添加特定的分钟数,然后将其传递给MySQL日期时间? 问题答案: 尽管JS确实拥有足够的基本工具来执行此操作,但它相当笨拙。

  • 问题内容: 我在具有Excel Date序列号Date的csv文件中得到了名为DateOfBirth的列 例子: 当我在excel中格式化单元格时,这些将转换为 我需要在SSIS或SQL中进行此转换。如何做到这一点? 问题答案: 在SQL中:

  • 问题内容: 是否有一个内置的转换方法为在Python,例如获得在指定日期的午夜?相反的转换很容易:有一个方法。 我真的必须手动打电话吗? 问题答案: 您可以使用;现在,您创建一个初始化为午夜的对象。

  • 问题内容: 我有一个将其写入ES的DataFrame 在写ES之前,我将列转换为EPOCH中的Date。 如我所见,这已转换为日期。 但是在将其写入ES之后,我仍然可以使用EPOC格式。 任何人都可以知道这里出了什么问题。 谢谢 问题答案: 让我们考虑一下您的问题中的示例: 您将需要列铸造成一个字符串,并禁用这是默认。 该参数定义是为Elasticsearch中的Date字段创建类似Rich Da

  • 问题内容: 在C语言中,我可以使用数字做一些技巧: 在Swift中有没有办法做到这一点?请注意,相同的方法无效: 有没有一种方法可以让C的行为在Swift中减法? 谢谢! 问题答案: 所有有符号和无符号整数类型都有一个构造函数,该构造函数从具有相同内存表示形式的有符号(反之亦然)创建无符号数字:

  • 在Swift中,我使用kCFStringTransformToLatin将日语转换为Romaji,将汉语转换为拼音。在Java中有什么可以与Android相媲美的吗?或者我必须导入一些库(正如在这里的几篇文章中讨论的那样)。如果是,建议哪一个?