javascript - Moment.js:判断 24 小时是否已过
问题描述
非常简单,但基本上我需要检查自用户提供特定命令以来是否已过去 24 小时。(rate-limiting 1 Use / Day) 当他们使用命令时,当前时间被保存并存储,这样没问题,但是当前系统只对日期起作用,检查lastDaily
's date 部分是否小于当前的日期。这导致命令在午夜重置的情况。
我想这样做,如果用户在2:25PM
on运行日常命令,9/12/2019
他们将无法使用它,直到第二天的同一时间(或下一分钟)。
代码
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
希望这可以帮助 :)
推荐阅读
- apache-kafka - 在 Kafka Streams 中将所有消息延迟 30 分钟
- sql-server - 包含来自数据库的 1-30 匹配数据的表
- python - 仅从 pandas 中的 datetime 字段获取非空值的时间戳
- vue.js - 如何在 Vue 3 中跨组件共享异步 API 数据?
- android - Dagger 和 Room,不创建 DaggerTestAppComoponent.create()
- angularjs - AngularJS 视图未在 Firefox 中显示
- c - 将 C-Function 编译到 Postgres 时出现问题;编译器没有找到 postgres.h
- node.js - node.js 仅在服务器端使用会话值
- ubuntu - 如何将我的 Ubuntu 服务器链接到我的 GitHub 存储库?
- jenkins - 格里特詹金斯集成