gpt4 book ai didi

mysql - 检查成员(member)资格是否过期

转载 作者:行者123 更新时间:2023-11-29 10:18:11 24 4
gpt4 key购买 nike

在我的 Nodejs 服务器中,我有两种类型的成员(member)资格(免费、付费)。付费成员(member)资格自购买之日起有效期为 31 天。

当成员(member)购买此类成员(member)资格时,我(服务器端)在接受TIMESTAMP的字段paid_expires更新我的数据库(MySQL) > 输入当前日期加上 31 天。

如果我的服务器有 X 名付费成员(member)在不同日期购买了成员(member)资格,那么提前 3 小时通知每个人其成员(member)资格到期的有效方法是什么?

最佳答案

为此需要解决几个要素,因此我将一一介绍它们

首先,您需要一些按时间间隔运行的函数。这可以通过 setInterval 来处理

setInterval(() => {
/**
* perform the magic here or call another function.
* Note that if you're working with classes you cannot reference "this"
* here without first setting it before the interval to a const
* for example with "const that = this;"
*/
}, 60000); // runs every minute

地址旁边是间隔执行的回调函数,这就是所有魔法发生的地方。您首先需要在数据库中查询所有拥有付费成员(member)资格的成员(member)。即是否由 paid_expires 是否确定列是 NOT NULL那么它将是诸如SELECT memberId, paid_expires FROM member WHERE paid_expires IS NOT NULL之类的东西。以下步骤取决于您的 mysql 数据库驱动程序如何返回行,但我假设它是一个对象数组。您现在拥有所有付费用户及其到期日期的数组。

SQL 查询的假设输出

let members = [
{
memberId: "b6c4aeb1-6a23-477c-856a-d5f898153b62",
paid_expires: "2018-03-12T14:00:00"
},
{
memberId: "afc89eee-ef5e-4fbf-8451-aeac5620abe6",
paid_expires: "2018-03-12T16:30:00"
}
];

最后一步是循环遍历这个对象数组并计算它们是否距离过期还有 3 小时或更短时间。为此,您需要使用 MomentJSadd , diffduration功能。您可以使用add将数据库中的值添加 31 天,然后您可以使用 duration 的组合和diff确定是否必须发送通知

最后一部分的示例是

const expiryDate = moment(sqlrow.paid_expires).add(31, 'd');
const timeout = moment.duration(expiryDate.diff());

if (timeout.asHours() <= 3) {
// send notification
}

Here is a runkit notebook showing this code in action

关于mysql - 检查成员(member)资格是否过期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49794218/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com