时刻.js:确定是否已过去 24 小时



非常简单,但基本上我需要找到一个检查,看看自从用户提供特定命令以来是否已经过去了 24 小时。(限速 1 次使用/天(当他们使用该命令时,当前时间被保存和存储,所以没有问题,但当前系统只在日期工作,检查lastDaily的日期部分是否小于当前日期。这会导致命令在午夜重置的情况。

我想这样做,如果用户在9/12/20192:25PM运行每日命令,他们将在第二天的同一时间(或下一分钟(之前无法使用它。

法典

const fs = require("fs");
const moment = require("moment");
const { RichEmbed } = require("discord.js");
const { m } = require("../../botconfig.json");
module.exports = {
config: {
// Command Config: Hidden for space's sake.
},
run: async (bot, message, args) => {
let userData = JSON.parse(fs.readFileSync("db/userdata.json", "utf8"));
let sender = message.author;
// Initialise missing data if needed
if (!userData[sender.id]) { // if there is no userdata,
userData[sender.id] = {}; // Create it as an empty object
}
if (!userData[sender.id].money) {
userData[sender.id].money = 1000;
}
if (!userData[sender.id].lastDaily) {
userData[sender.id].lastDaily = "";
}
// Save Changes to File
fs.writeFile("db/userdata.json", JSON.stringify(userData), err => {
if (err) console.error(err);
});
var cancollect = false;
let ld = userData[sender.id].lastDaily;
if (ld != moment().format("L")) { // MM/DD/YY
userData[sender.id].lastDaily = moment().format("L");
userData[sender.id].money += 500;
// Send Success Embed
} else {
// Send Failure Embed
}
// Save Changes Again
fs.writeFile("db/userdata.json", JSON.stringify(userData), err => {
if (err) console.error(err);
});
}
};

如果以MM/DD/YY的格式存储日期,则无法检查时差。因此,为了获得时差,如果您可以将其存储为类似"2019-12-10T10:53:53+05:30"的格式,则可以通过moment().format()获取当前时间戳。

你可以做这样的事情

lastDate = moment().format()
> "2019-12-09T10:53:53+05:30"
nextDay = moment(lastDate).add(1, 'days').format()
> "2019-12-10T10:53:53+05:30"

获得上述格式的时间戳后,您需要将日期转换为 unix 格式

lastDate = moment(lastDate).valueOf()
> 1575869033000
nextDay = moment(nextDay).valueOf()
> 1575955433000

现在,您可以通过这样做来获得时间差异

result = moment(nextDay-lastDate).valueOf()
> 86400000 // which is =24hrs

希望这对:)有所帮助

您可以参考以下示例来解决您的问题。

let lastExecutionTime = Moment().utc().format(); //your last execution time
let nextDay = Moment(lastExecutionTime).add(1,'day').utc().format(); // calculate 24 hours next to last access
let currentTime = Moment().utc().format(); //current time
let canExecuteNow = Moment(currentTime).isSameOrAfter(nextDay);

最新更新