如何在JavaScript/Node.JS中解析基于时间的令牌?

如何在JavaScript/Node.JS中解析基于时间的令牌?,javascript,node.js,time,difference,abbreviation,Javascript,Node.js,Time,Difference,Abbreviation,我目前正在尝试创建一个Discord机器人,它可以临时禁止,我知道如何处理这个问题。唯一的问题是我不知道如何使用像3w/2w/1y/etc这样的参数转换为新时间来创建计时器。我在谷歌上爬了一个遍,想找到一个答案,但我甚至找不到任何关于如何实现这一点的提示或提示,也许你们可以给我指出正确的方向。你们可以将参数转换为毫秒,记录当前的日期。现在()并检查与新的日期的差异。现在()具有一定的更新率 如果时差较小,用户仍被禁止,否则用户将被取消绑定。您可以使用libaray npm安装日期fns 然后使用

我目前正在尝试创建一个Discord机器人,它可以临时禁止,我知道如何处理这个问题。唯一的问题是我不知道如何使用像
3w/2w/1y/etc
这样的参数转换为新时间来创建计时器。我在谷歌上爬了一个遍,想找到一个答案,但我甚至找不到任何关于如何实现这一点的提示或提示,也许你们可以给我指出正确的方向。

你们可以将参数转换为毫秒,记录当前的
日期。现在()
并检查与新的
日期的差异。现在()
具有一定的更新率

如果时差较小,用户仍被禁止,否则用户将被取消绑定。

您可以使用libaray
npm安装日期fns

然后使用formatDistance函数


formatDistance(新日期(1986,3,4,11,32,0),新日期(1986,3,4,10,32,0),{addSuffix:true}/=>“大约1小时内”

我将使用正则表达式解析参数,然后通过毫秒将其映射到日期:

const映射={
w:7*24*60*60*1000,
d:24*60*60*1000,
//你想要什么其他单位
};
常量toDate=(字符串)=>{
常量匹配=字符串匹配(/(?[0-9]*)(?[a-z]*)/);
如果(匹配){
常量{number,unit}=match.groups;
常量偏移=数字*映射[单位];
返回新日期(Date.now()+偏移量);
}
}
示例:

> toDate('3w')
2020-09-08T19:04:15.743Z
> toDate('2d')
2020-08-20T19:04:20.622Z

若要转换该格式,请将
h
d
w
m
y
替换为
x
,然后将其拆分,然后将第一个乘以第二个,以秒为单位得出总和

假设你不想使用图书馆。(这可能更可靠)

下面是一些测试,您显然需要添加验证,或者可能需要添加
NaN

const shortSinceToSeconds=input=>{
var p=输入
.替换('h','x3600')
.替换('d','x86400')
.替换('w','x604800')
.替换('m','x2.628e+6')
.替换('y','x3.154e+7')。拆分('x'))
返回(p[0]| | 0)*(p[1]| | 0)
}
常数测试=[
‘1h’、‘13h’、‘1d’、‘100d’、‘1w’、‘100w’、‘2m’、‘1y’
]
//
对于(让我来测试一下){
log(`${i}=${shortSinceToSeconds(i)}seconds`)

}
我正在更具体地分析参数,并根据提供的参数生成新的更新时间。