1
This commit is contained in:
82
api/utils/account_utils.js
Normal file
82
api/utils/account_utils.js
Normal file
@@ -0,0 +1,82 @@
|
||||
/**
|
||||
* 账号工具函数
|
||||
* 提供账号相关的工具方法
|
||||
*/
|
||||
|
||||
const dayjs = require('dayjs');
|
||||
const utc = require('dayjs/plugin/utc');
|
||||
const timezone = require('dayjs/plugin/timezone');
|
||||
|
||||
// 启用 UTC 和时区插件
|
||||
dayjs.extend(utc);
|
||||
dayjs.extend(timezone);
|
||||
|
||||
/**
|
||||
* 计算剩余天数(使用 UTC 时间避免时区问题)
|
||||
* @param {Date|string|null} authorizationDate - 授权日期
|
||||
* @param {number} authorizationDays - 授权天数
|
||||
* @returns {number} 剩余天数
|
||||
*/
|
||||
function calculateRemainingDays(authorizationDate, authorizationDays) {
|
||||
if (!authorizationDate || !authorizationDays || authorizationDays <= 0) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
// 使用 UTC 时间计算,避免时区问题
|
||||
const startDate = dayjs(authorizationDate).utc().startOf('day');
|
||||
const endDate = startDate.add(authorizationDays, 'day');
|
||||
const now = dayjs().utc().startOf('day');
|
||||
|
||||
// 计算剩余天数
|
||||
const remaining = endDate.diff(now, 'day', false); // 使用整数天数
|
||||
return Math.max(0, remaining);
|
||||
}
|
||||
|
||||
/**
|
||||
* 检查授权是否有效
|
||||
* @param {Date|string|null} authorizationDate - 授权日期
|
||||
* @param {number} authorizationDays - 授权天数
|
||||
* @returns {boolean} 授权是否有效
|
||||
*/
|
||||
function isAuthorizationValid(authorizationDate, authorizationDays) {
|
||||
const remainingDays = calculateRemainingDays(authorizationDate, authorizationDays);
|
||||
return remainingDays > 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 为账号对象添加 remaining_days 字段
|
||||
* @param {Object} account - 账号对象(可以是 Sequelize 实例或普通对象)
|
||||
* @returns {Object} 添加了 remaining_days 的账号对象
|
||||
*/
|
||||
function addRemainingDays(account) {
|
||||
// 如果是 Sequelize 实例,转换为普通对象
|
||||
const accountData = account.toJSON ? account.toJSON() : account;
|
||||
|
||||
const authDate = accountData.authorization_date;
|
||||
const authDays = accountData.authorization_days || 0;
|
||||
|
||||
accountData.remaining_days = calculateRemainingDays(authDate, authDays);
|
||||
|
||||
return accountData;
|
||||
}
|
||||
|
||||
/**
|
||||
* 为账号数组添加 remaining_days 字段
|
||||
* @param {Array} accounts - 账号数组
|
||||
* @returns {Array} 添加了 remaining_days 的账号数组
|
||||
*/
|
||||
function addRemainingDaysToAccounts(accounts) {
|
||||
if (!Array.isArray(accounts)) {
|
||||
return accounts;
|
||||
}
|
||||
|
||||
return accounts.map(account => addRemainingDays(account));
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
calculateRemainingDays,
|
||||
isAuthorizationValid,
|
||||
addRemainingDays,
|
||||
addRemainingDaysToAccounts
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user