繁体   English   中英

Moment.js:判断是否过了 24 小时

[英]Moment.js: Determine whether or not 24 hours has passed or not

非常简单,但基本上我需要检查自用户提供特定命令以来是否已经过去了 24 小时。 (rate-limiting 1 Use / Day) 当他们使用该命令时,会保存和存储当前时间,所以没有问题,但是当前系统只对 date 起作用,检查lastDaily的日期部分是否小于当前日期。 这会导致命令在午夜重置的情况。

我想让它这样,如果用户在运行日常命令2:25PM9/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

希望这可以帮助 :)

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

        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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM