Discord.js 正常运行时间命令

时间:2021-04-22 18:11:39

标签: discord.js

在 djs 中编写一个命令来显示我的正常运行时间。当我运行它时,它会显示总秒数、分钟数、小时数等,但它不会将秒数和分钟数限制为秒,或将小时数限制为 24。

- task: DotNetCoreCLI@2
  displayName: DotNetCoreCLI pack !master
  condition: and(succeeded(), ne(variables['Build.SourceBranch'], 'refs/heads/master'))
  inputs:
    command: 'pack'
    packagesToPack: $(projectsNuGet)
    nobuild: true
    arguments: --version-suffix pre9999

1 个答案:

答案 0 :(得分:0)

为什么除法会限制数字? 5678000 / 1000 总是会得到 5678。您要做的是取模 (%) 而不是除法 (/)。

const seconds = message.client.uptime % 1000;
const minutes = Math.floor((message.client.uptime / 1000)) % 60;
const hours = Math.floor((message.client.uptime / (60 * 1000))) % 60;
const days = Math.floor(message.client.uptime / (60 * 1000 * 60 * 24));
if(command === "uptime") {
    message.channel.send(`The bot has been up for` + ` ` + `${days} days,` + ` ` + `${hours} hours,` + ` ` + `${minutes} minutes` + ` ` + `${seconds} seconds.`)
    return;
}

不过,有一个更好的解决方案。将数字转换为日期格式,并使用它直接获取分钟、小时、天等 - 它唯一的缺点是它给出了一个月中的某一天,而不是自 JS Epoch 时间以来经过的天数,因此(除非有一个偶数我不知道的更清洁的解决方案)您需要再初始化一个变量。

另外,如果你可以简单地传递一个带有参数的字符串,为什么要连接字符串?

无论如何,这是我对您的问题的解决方案:

var uptime = new Date(message.client.uptime);
const days = Math.floor(message.client.uptime / (60 * 1000 * 60 * 24));
if(command === "uptime") {
        message.channel.send(`The bot has been up for ${days} days, ${uptime.getHours()} hours, ${uptime.getMinutes()} minutes ${uptime.getSeconds()} seconds.`)
        return;
    }