时间:整理时间方法

This commit is contained in:
luying
2021-05-08 19:09:51 +08:00
parent 6f03a96c51
commit 78e3c26a7a
51 changed files with 662 additions and 411 deletions

View File

@@ -126,7 +126,6 @@ export enum GUILD_BOSS_STATUS {
}
export const GUILD_REPORT_NUM = 40;
export const REFRESH_HOUR = 5;
// 获得活跃值途径id
export enum GUILD_POINT_WAYS {

View File

@@ -17,6 +17,11 @@ export const GUEST_MAX_TIME = 60 * 60; // 游客体验时间
export const GUEST_DAY = 15; // 同一设备15天内不得重复体验游客模式
export const REFRESH_TIME = 5; // 统一一天刷新时间
export enum TIME_OUTPUT_TYPE {
DATE = 1,
STAMP_10 = 2,
STAMP_13 = 3
}
export const COUNTER = {
UID: { name: 'uid', def: 1 },

View File

@@ -1,6 +1,7 @@
import BaseModel from './BaseModel';
import { index, getModelForClass, prop, DocumentType } from '@typegoose/typegoose';
import { DAILY_CONST } from './../consts';
import { getZeroPoint } from '../pubUtils/timeUtil';
/**
@@ -28,8 +29,7 @@ export default class DailyRecord extends BaseModel {
public static async refreshRecord(roleId: string, type: number, lean = true) {
const dailyRecord: DailyRecordType = await DailyRecordModel.findOne({ roleId, type }).lean(lean);
let {count = 0, refTime = 0, buyCount = 0} = dailyRecord||{};
let now = new Date();
let today = now.setHours(DAILY_CONST.REFRESH_TIME, 0, 0, 0);
let today = getZeroPoint();
if(today > refTime) {
refTime = today; count = 0; buyCount = 0;

View File

@@ -1,5 +1,6 @@
import BaseModel from './BaseModel';
import { index, getModelForClass, prop, DocumentType } from '@typegoose/typegoose';
import { getZeroPointD } from '../pubUtils/timeUtil';
/**
* 情谊点记录
@@ -29,14 +30,14 @@ export default class FriendPoint extends BaseModel {
* @memberof FriendPoint
*/
public static async updatePointToday(roleId: string, roleName: string, cntInc: number, maxPerDay: number, type: number, lean = true) {
const curTime = new Date((new Date()).setHours(0, 0, 0, 0));
const curTime = getZeroPointD();
// 当 oldCnt + cntInc > maxPerDay 时需计算实际可以获得的点数cntInc - (newCnt - maxPerDay)
const rec: FriendPointType = await FriendPointModel.findOneAndUpdate({roleId, roleName, createdAt: {$gte: curTime}, cnt: {$lt: maxPerDay}, type}, {$inc: {cnt: cntInc, sendCnt: 0}}, {upsert: true, new: true}).lean(lean);
return rec;
}
public static async updateSendCntToday(roleId: string, roleName: string, cntInc: number, maxPerDay: number, type: number, lean = true) {
const curTime = new Date((new Date()).setHours(0, 0, 0, 0));
const curTime = getZeroPointD();
// 当 oldCnt + cntInc > maxPerDay 时需计算实际可以获得的点数cntInc - (newCnt - maxPerDay)
const rec: FriendPointType = await FriendPointModel.findOneAndUpdate({roleId, roleName, createdAt: {$gte: curTime}, sendCnt: {$lt: maxPerDay}, type}, {$inc: {sendCnt: cntInc, cnt: 0}}, {upsert: true, new: true}).lean(lean);
return rec;
@@ -52,7 +53,7 @@ export default class FriendPoint extends BaseModel {
* @memberof FriendPoint
*/
public static async getFrdPointRecToday(roleId: string, type: number, lean = true) {
const curTime = new Date((new Date()).setHours(0, 0, 0, 0));
const curTime = getZeroPointD();
const rec: FriendPointType = await FriendPointModel.findOne({roleId, createdAt: {$gte: curTime}, type}).lean(lean);
return rec;
}

View File

@@ -2,8 +2,8 @@ import BaseModel from './BaseModel';
import { index, getModelForClass, prop, DocumentType, Ref } from '@typegoose/typegoose';
import Role, { RoleType } from './Role';
import { genCode } from '../pubUtils/util';
import { GUILD_STRUCTURE, GUILD_STATUS, GUILD_PER_PAGE, GUILD_SELECT, REDIS_KEY } from '../consts';
import { getCurWeekTime, nowSeconds } from '../pubUtils/timeUtil';
import { GUILD_STRUCTURE, GUILD_STATUS, GUILD_PER_PAGE, GUILD_SELECT, REDIS_KEY, SHOP_REFRESH_TYPE } from '../consts';
import { getZeroPoint, nowSeconds } from '../pubUtils/timeUtil';
import { reduceCe } from '../pubUtils/util';
class Structure {
@@ -229,7 +229,7 @@ export default class Guild extends BaseModel {
* @param lean
*/
public static async resetGuildTrain(code: string, serverId: number, trainLv: number, lean = true) {
const time = getCurWeekTime(1, 5);//每周一5点刷新
const time = getZeroPoint(SHOP_REFRESH_TYPE.WEEKLY);//每周一5点刷新
const result = await GuildModel.findOneAndUpdate({ code, status: GUILD_STATUS.RUNNING, serverId, resetTrainTime:{$ne:time}},{$set: {trainId: 1, resetTrainTime: time, trainLv}}, {new: true}).lean(lean);
return result;
}

View File

@@ -1,6 +1,7 @@
import BaseModel from './BaseModel';
import { index, getModelForClass, prop, DocumentType } from '@typegoose/typegoose';
import { getCurWeekDate} from '../pubUtils/timeUtil';
import { getZeroPointD } from '../pubUtils/timeUtil';
import { SHOP_REFRESH_TYPE } from '../consts';
@index({ serverId: 1, cityId: 1, createdAt: 1 })
export default class GuildActivityCity extends BaseModel {
@@ -28,14 +29,14 @@ export default class GuildActivityCity extends BaseModel {
// 每天宣战一次
public static async getAllCities(serverId: number) {
let curWeek = getCurWeekDate(1, 0);
let curWeek = getZeroPointD(SHOP_REFRESH_TYPE.WEEKLY);
let rec: GuildActivityCityType[] = await GuildActivityCityModel.find({ serverId, createdAt: { $gte: curWeek }}).lean();
return rec;
}
public static async getCity(serverId: number, cityId: number) {
let curWeek = getCurWeekDate(1, 0);
let curWeek = getZeroPointD(SHOP_REFRESH_TYPE.WEEKLY);
let rec: GuildActivityCityType = await GuildActivityCityModel.findOne({ serverId, cityId, createdAt: { $gte: curWeek }}).lean();
return rec;
@@ -43,7 +44,7 @@ export default class GuildActivityCity extends BaseModel {
// 检查是否宣战过
public static async checkDeclartion(serverId: number, guildCode: string) {
let curWeek = getCurWeekDate(1, 0);
let curWeek = getZeroPointD(SHOP_REFRESH_TYPE.WEEKLY);
let rec: GuildActivityCityType = await GuildActivityCityModel.findOne(
{ serverId, createdAt: { $gte: curWeek }, declareGuilds: { $in: [guildCode]}}).lean();
@@ -52,7 +53,7 @@ export default class GuildActivityCity extends BaseModel {
// 宣言
public static async declare(serverId: number, cityId: number, guildCode: string) {
let curWeek = getCurWeekDate(1, 0);
let curWeek = getZeroPointD(SHOP_REFRESH_TYPE.WEEKLY);
let rec: GuildActivityCityType = await GuildActivityCityModel.findOneAndUpdate(
{ serverId, cityId, createdAt: { $gte: curWeek } },
{ $setOnInsert: { serverId, cityId }, $push: { declareGuilds: guildCode }, $inc: {declareCount: 1 } },
@@ -63,7 +64,7 @@ export default class GuildActivityCity extends BaseModel {
// 占领
public static async guard(serverId: number, cityId: number, guildCode: string, guildName: string) {
let curWeek = getCurWeekDate(1, 0);
let curWeek = getZeroPointD(SHOP_REFRESH_TYPE.WEEKLY);
let rec: GuildActivityCityType = await GuildActivityCityModel.findOneAndUpdate(
{ serverId, cityId, createdAt: { $gte: curWeek } },
{ $set: { guardGuildCode: guildCode, guardGuildName: guildName, guardTime: new Date()} },
@@ -74,7 +75,7 @@ export default class GuildActivityCity extends BaseModel {
// 活动结束后需要清空占领情况
public static async clearGuard(serverId: number, cityId: number) {
let curWeek = getCurWeekDate(1, 0);
let curWeek = getZeroPointD(SHOP_REFRESH_TYPE.WEEKLY);
let rec: GuildActivityCityType = await GuildActivityCityModel.findOneAndUpdate(
{ serverId, cityId, createdAt: { $gte: curWeek } },
{ $set: { guardGuildCode: "", guardGuildName: "", declareCount: 0, declareGuilds: [] } },

View File

@@ -1,7 +1,7 @@
import BaseModel from './BaseModel';
import { index, getModelForClass, prop, DocumentType } from '@typegoose/typegoose';
import { ItemReward } from '../domain/dbGeneral';
import { getTodayZeroDate } from '../pubUtils/timeUtil';
import { getZeroPointD } from '../pubUtils/timeUtil';
import { genCode } from '../pubUtils/util';
import { Member, WoodenHorse, Event } from '../domain/battleField/guildActivity'
@@ -63,7 +63,7 @@ export default class GuildActivityRecord extends BaseModel {
// 每天一条记录
public static async getRecord(guildCode: string, serverId: number, aid: number, events?: Event[]) {
let today = getTodayZeroDate();
let today = getZeroPointD();
let docs = new GuildActivityRecordModel();
let code = genCode(10);
let update = Object.assign(docs, { code, guildCode, serverId, aid, createdAt: new Date() });
@@ -76,7 +76,7 @@ export default class GuildActivityRecord extends BaseModel {
}
public static async updateInfo(guildCode: string, update: GuildActivityRecordUpdateParam) {
let today = getTodayZeroDate();
let today = getZeroPointD();
let rec: GuildActivityRecordType = await GuildActivityRecordModel.findOneAndUpdate(
{ guildCode, createdAt: { $gte: today } },
@@ -86,7 +86,7 @@ export default class GuildActivityRecord extends BaseModel {
public static async pushEvent(guildCode: string, event: Event) {
let today = getTodayZeroDate();
let today = getZeroPointD();
let rec: GuildActivityRecordType = await GuildActivityRecordModel.findOneAndUpdate(
{ guildCode, createdAt: { $gte: today } },

View File

@@ -1,6 +1,6 @@
import BaseModel from './BaseModel';
import { index, getModelForClass, prop, DocumentType } from '@typegoose/typegoose';
import { getBeforeDayDate } from '../pubUtils/timeUtil';
import { getTimeFun } from '../pubUtils/timeUtil';
import { genCode } from '../pubUtils/util';
import { PvpHeroInfo } from '../domain/dbGeneral';
import { EXTERIOR } from '../pubUtils/dicParam';
@@ -96,7 +96,8 @@ export default class PvpRecord extends BaseModel {
}
public static async delPvpRecords() {
let result = await PvpRecordModel.deleteMany({ createTime: {$lt: getBeforeDayDate(3)}});//删除小于三天的战报
let t = <number>getTimeFun().getBeforeDayWithHour(3);
let result = await PvpRecordModel.deleteMany({ createTime: {$lt: t}});//删除小于三天的战报
return result;
}
}

View File

@@ -1,10 +1,10 @@
import { HANG_UP_CONSTS, ROLE_TERAPH, ROLE_SELECT, ABI_TYPE } from './../consts';
import { HANG_UP_CONSTS, ROLE_TERAPH, ROLE_SELECT, ABI_TYPE, TIME_OUTPUT_TYPE } from './../consts';
import BaseModel from './BaseModel';
import { index, getModelForClass, prop, DocumentType, Ref, mongoose } from '@typegoose/typegoose';
import User from './User';
import { shouldRefresh, reduceCe } from '../pubUtils/util';
import { initRoleAtrr } from '../pubUtils/playerCe';
import { nowSeconds, getBeforeDayDate } from '../pubUtils/timeUtil';
import { nowSeconds, getTimeFunD } from '../pubUtils/timeUtil';
import { Figure } from '../domain/dbGeneral';
import { EXTERIOR } from '../pubUtils/dicParam';
import Hero from './Hero';
@@ -360,7 +360,7 @@ export default class Role extends BaseModel {
const result = await RoleModel.findOne({ roleId }).lean(lean);
const lastSpdUpTime = result?.lastSpdUpTime;
let role: RoleType;
if (!lastSpdUpTime || (shouldRefresh(lastSpdUpTime, curTime, HANG_UP_CONSTS.REFRESH_TIME, 1) && cnt <= HANG_UP_CONSTS.MAX_SPD_UP_CNT)) {
if (!lastSpdUpTime || (shouldRefresh(lastSpdUpTime, curTime) && cnt <= HANG_UP_CONSTS.MAX_SPD_UP_CNT)) {
role = await RoleModel.findOneAndUpdate({ roleId }, { hangUpSpdUpCnt: HANG_UP_CONSTS.MAX_SPD_UP_CNT - cnt, lastSpdUpTime: curTime }, { new: true }).lean(lean);
} else {
role = await RoleModel.findOneAndUpdate({ roleId, hangUpSpdUpCnt: { $gte: cnt } }, { $inc: { hangUpSpdUpCnt: -cnt }, lastSpdUpTime: curTime }, { new: true }).lean(lean);
@@ -634,8 +634,8 @@ export default class Role extends BaseModel {
// 获取战力在中位数的玩家
public static async getMedianRole(serverId: number) {
let yesterday = getBeforeDayDate(1);
const roles: RoleType[] = await RoleModel.find({ serverId, updatedAt: { $gte: new Date(yesterday) } })
let yesterday = <Date>getTimeFunD().getBeforeDayWithHour(1);
const roles: RoleType[] = await RoleModel.find({ serverId, updatedAt: { $gte: yesterday } })
.select('topLineup')
.sort({ ce: -1 }).lean();
return roles[Math.floor(roles.length / 2)]

View File

@@ -1,7 +1,6 @@
import BaseModel from './BaseModel';
import { index, getModelForClass, prop, DocumentType, modelOptions } from '@typegoose/typegoose';
import { getTodayZeroDate } from '../pubUtils/timeUtil';
import { REFRESH_HOUR } from '../consts';
import { getZeroPointD } from '../pubUtils/timeUtil';
import { RECRUIT } from '../pubUtils/dicParam';
class Floor {
@@ -61,13 +60,13 @@ export default class UserGacha extends BaseModel {
@prop({ required: true, default: 0 })
freeCount: number; // 免费次数
@prop({ required: true, default: () => { return getTodayZeroDate(REFRESH_HOUR) } })
@prop({ required: true, default: getZeroPointD })
refFreeTime: Date; // 免费次数刷新时间
@prop({ required: true, type: () => Hope, default: [], _id: false })
hope: Hope[]; // 心愿单
@prop({ required: true, default: () => { return getTodayZeroDate(REFRESH_HOUR) } })
@prop({ required: true, default: getZeroPointD })
refHopeTime: Date; // 心愿单刷新时间
@prop({ required: true, default: 0 })
@@ -87,7 +86,7 @@ export default class UserGacha extends BaseModel {
@prop({ required: true, default: [], type: Number })
visitedHero: number[]; // 玩家指定武将
@prop({ required: true, default: () => { return getTodayZeroDate(REFRESH_HOUR) } })
@prop({ required: true, default: getZeroPointD })
refVisitedTime: Date; // 玩家指定武将
public static async findAllByRole(roleId: string) {

View File

@@ -2,7 +2,7 @@ import BaseModel from './BaseModel';
import { index, getModelForClass, prop, DocumentType, Ref } from '@typegoose/typegoose';
import Role, { RoleType } from './Role';
import { GUILD_AUTH, USER_GUILD_STATUS, GUILD_JOB } from '../consts';
import { getTodayZeroDate, nowSeconds } from '../pubUtils/timeUtil';
import { getZeroPointD, nowSeconds } from '../pubUtils/timeUtil';
import { ARMY } from '../pubUtils/dicParam';
class ActiveRecord {
@prop({ required: true })
@@ -187,7 +187,7 @@ export default class UserGuild extends BaseModel {
}
public static async getWishPoolGoods(guildCode: string, select?: string, lean = true) {
const userGuilds: UserGuildType[] = await UserGuildModel.find({ guildCode, status: USER_GUILD_STATUS.ON, refTimeDaily: { $gte: getTodayZeroDate() } })
const userGuilds: UserGuildType[] = await UserGuildModel.find({ guildCode, status: USER_GUILD_STATUS.ON, refTimeDaily: { $gte: getZeroPointD() } })
.select(select).lean(lean);
return userGuilds;
}

View File

@@ -1,6 +1,6 @@
import BaseModel from './BaseModel';
import { index, getModelForClass, prop, DocumentType } from '@typegoose/typegoose';
import { getTodayZeroDate } from '../pubUtils/timeUtil';
import { getZeroPointD } from '../pubUtils/timeUtil';
import { genCode } from '../pubUtils/util';
export class Record {
@@ -89,7 +89,7 @@ export default class UserGuildActivityRec extends BaseModel {
// 每天一条记录
public static async getRecord(roleId: string, roleName: string, guildCode: string, serverId: number, sourceCode: string, aid: number) {
let today = getTodayZeroDate();
let today = getZeroPointD();
let docs = new UserGuildActivityRecModel();
let code = genCode(10);
let update = Object.assign(docs, { code, roleId, roleName, guildCode, serverId, aid });
@@ -104,7 +104,7 @@ export default class UserGuildActivityRec extends BaseModel {
public static async findByRoleId(roleId: string, aid: number) {
let today = getTodayZeroDate();
let today = getZeroPointD();
let rec: UserGuildActivityRecType = await UserGuildActivityRecModel.findOne({ roleId, aid, createdAt: { $gte: today }}).lean();
return rec;
@@ -139,7 +139,7 @@ export default class UserGuildActivityRec extends BaseModel {
}
public static async updateInfoByRoleId(roleId: string, update: UserGuildActivityRecUpdateParam) {
let today = getTodayZeroDate();
let today = getZeroPointD();
let rec: UserGuildActivityRecType = await UserGuildActivityRecModel.findOneAndUpdate(
{ roleId, createdAt: { $gte: today } }, { $set: update }, { new: true }).lean();
return rec;

View File

@@ -1,7 +1,7 @@
import BaseModel from './BaseModel';
import { index, getModelForClass, prop, DocumentType, modelOptions } from '@typegoose/typegoose';
import { genCode } from '../pubUtils/util';
import { getCurWeekDate, getCurMonthDate, getTodayZeroDate } from '../pubUtils/timeUtil';
import { getZeroPointD } from '../pubUtils/timeUtil';
import { SHOP_REFRESH_TYPE } from '../consts';
import { DicShop } from '../pubUtils/dictionary/DicShop';
@@ -37,9 +37,9 @@ export default class UserShop extends BaseModel {
count: number; // 数量
private static getRefreshCondition() {
let today = getTodayZeroDate(5);
let cutWeek = getCurWeekDate(1, 5);
let curMonth = getCurMonthDate(1, 5);
let today = getZeroPointD();
let cutWeek = getZeroPointD(SHOP_REFRESH_TYPE.WEEKLY);
let curMonth = getZeroPointD(SHOP_REFRESH_TYPE.MONTHLY);
return [
{ createdAt: { $gte: today }, refreshType: SHOP_REFRESH_TYPE.DAILY },

View File

@@ -1,6 +1,7 @@
import BaseModel from './BaseModel';
import { index, getModelForClass, prop, DocumentType, modelOptions } from '@typegoose/typegoose';
import { getCurWeekDate } from '../pubUtils/timeUtil';
import { getZeroPointD } from '../pubUtils/timeUtil';
import { SHOP_REFRESH_TYPE } from '../consts';
/**
* 玩家购买商店记录表,每个商品一条,每次刷新新建一条
@@ -39,7 +40,7 @@ export default class UserTask extends BaseModel {
public static async findByRole(roleId: string) {
let curWeek = getCurWeekDate(1, 5);
let curWeek = getZeroPointD(SHOP_REFRESH_TYPE.WEEKLY);
let rec: UserTaskType = await UserTaskModel.findOneAndUpdate({ roleId }, { $setOnInsert: {
mainTaskStage: 1, dailyTaskPoint: 0, dailyTaskRefWeekly: curWeek, dailyTaskPointWeekly: 0, dailyTaskBox: [], achievementPoint: 0, achievementBox: []
} }, { new: true, upsert: true }).lean();
@@ -86,7 +87,7 @@ export default class UserTask extends BaseModel {
}
public static async refreshWeekly(roleId: string, debug = false) {
let curWeek = getCurWeekDate(1, 5);
let curWeek = getZeroPointD(SHOP_REFRESH_TYPE.WEEKLY);
let condition = { roleId };
if(!debug) {
condition['dailyTaskRefWeekly'] = { $lt: curWeek }

View File

@@ -2,7 +2,7 @@ import BaseModel from './BaseModel';
import { index, getModelForClass, prop, DocumentType, modelOptions } from '@typegoose/typegoose';
import { TASK_FUN_TYPE } from '../consts';
import { genCode } from '../pubUtils/util';
import { getTodayZeroDate } from '../pubUtils/timeUtil';
import { getZeroPointD } from '../pubUtils/timeUtil';
/**
* 玩家任务记录表
@@ -34,7 +34,7 @@ export default class UserTaskRec extends BaseModel {
received: number[]; // 是否已领取
private static getRefreshCondition(type: number) {
let today = getTodayZeroDate(5);
let today = getZeroPointD();
if(type == TASK_FUN_TYPE.DAILY) {
return { type, createdAt: { $gte: today } };
@@ -100,7 +100,7 @@ export default class UserTaskRec extends BaseModel {
}
public static async getHistoryRec(roleId: string, type: number, today?: Date) {
if(!today) today = getTodayZeroDate(5);
if(!today) today = getZeroPointD();
let rec: UserTaskRecType[] = await UserTaskRecModel.find({ roleId, type, createdAt: { $lt: today } }).lean();
return rec
}

View File

@@ -1,6 +1,6 @@
import BaseModel from './BaseModel';
import { index, getModelForClass, prop, DocumentType } from '@typegoose/typegoose';
import { nowSeconds, getTodayZeroPoint } from '../pubUtils/timeUtil';
import { nowSeconds, getTimeFun } from '../pubUtils/timeUtil';
@index({ guildCode: 1 })
@@ -37,7 +37,7 @@ export default class WishPoolReport extends BaseModel {
}
//获得day天之前的许愿池战报
public static async getReportsByTime(guildCode: string, day: number) {
let time = getTodayZeroPoint() - day * 24 * 60;
let time = <number>getTimeFun().getBeforeDayWithHour(day);
const reports = await WishPoolReportModel.find({ guildCode, dntTime: {$gte: time}}).sort({ dntTime : -1 });
return reports;
}

View File

@@ -2,7 +2,7 @@ import { ActivityModelType } from '../../db/Activity';
import { ActivityBase } from './activityField';
import { prop } from '@typegoose/typegoose';
import { UserGachaType } from '../../db/UserGacha';
import { getAfterDateByDay } from '../../pubUtils/timeUtil';
import { getTimeFun } from '../../pubUtils/timeUtil';
import { DicGacha } from '../../pubUtils/dictionary/DicGacha';
import { GACHA_OCCUPY_HID } from '../../consts';
import { gameData } from '../../pubUtils/data';
@@ -31,7 +31,8 @@ export class GachaData extends ActivityBase {
this.pickHero = userGacha.pickHero;
this.freeCount = userGacha.freeCount;
if(dicGacha.free.count > 0) {
this.refFreeTime = getAfterDateByDay(userGacha.refFreeTime, dicGacha.free.day);
let f = getTimeFun(userGacha.refFreeTime);
this.refFreeTime = <number>f.getAfterDayWithHour(dicGacha.free.day);
}
this.count = userGacha.count;
this.floor = userGacha.floor;
@@ -97,7 +98,8 @@ export class GachaListReturn {
if(userGacha) {
this.freeCount = userGacha.freeCount;
if(dicGacha.free.count > 0) {
this.refFreeTime = getAfterDateByDay(userGacha.refFreeTime, dicGacha.free.day);
let f = getTimeFun(userGacha.refFreeTime);
this.refFreeTime = <number>f.getAfterDayWithHour(dicGacha.free.day);
}
this.count = userGacha.count;
this.floor = getFloorStatus(dicGacha.id, userGacha.floor);

View File

@@ -11,7 +11,7 @@ import { getRandValueByMinMax, getRandEelm } from './util';
import { findWhere } from 'underscore';
import { RoleModel, RoleType } from '../db/Role';
import { Figure } from '../domain/dbGeneral';
import { getBeforeDaySeconds, nowSeconds } from './timeUtil';
import { getTimeFun, nowSeconds } from './timeUtil';
import { calPlayerCeAndSave, reCalAllHeroCe } from './playerCe';
import { checkTask, checkTaskWithHeroes, checkTaskWithEquip, accomplishTask } from './taskUtil';
import { CreateHeroParam } from '../domain/roleField/hero';
@@ -223,7 +223,7 @@ function unlockSingleFigure(dbFigures: Figure[], id: number, unlockDirect = fals
delete figure.unlockedId;
if (dicGoods.timeLimit) {
figure.time = getBeforeDaySeconds(-1 * dicGoods.timeLimit); // timeLimit天以后
figure.time = <number>getTimeFun().getAfterDay(dicGoods.timeLimit); // timeLimit天以后
}
}

View File

@@ -4,7 +4,7 @@ import { TASK_TYPE, ABI_STAGE, WAR_TYPE, GUILD_JOB, TASK_FUN_TYPE, FUNCS_ID } fr
import { UserTaskRecModel, UserTaskRecType } from '../db/UserTaskRec'
import { RoleType, RoleModel } from '../db/Role';
import { TaskParam, TaskListReturn } from '../domain/roleField/task';
import { getTodayZeroPoint } from './timeUtil';
import { getZeroPoint } from './timeUtil';
import { HeroType } from '../db/Hero';
import { EquipType, EquipModel } from '../db/Equip';
import { ItemInter } from './interface';
@@ -35,7 +35,7 @@ export async function checkTaskWithRole(roleId: string, taskType: number, role:
let pushMessage = new Array<TaskListReturn>();
if (taskType == TASK_TYPE.LOGIN_SUM) {
let today = getTodayZeroPoint();
let today = getZeroPoint();
if (today > role.loginTime) {
pushMessage = await checkTask(roleId, taskType, 1, true, {}, funcs);
//成长任务-累计登录游戏天数
@@ -43,7 +43,7 @@ export async function checkTaskWithRole(roleId: string, taskType: number, role:
}
}
else if (taskType == TASK_TYPE.LOGIN_SERIES) {
let today = getTodayZeroPoint();
let today = getZeroPoint();
if (today > role.loginTime) {
if (today - role.loginTime > 24 * 60 * 60) {
pushMessage = await checkTask(roleId, taskType, 1, false, {}, funcs);

View File

@@ -1,172 +1,473 @@
import { TIME_FORMAT, REFRESH_TIME, REFRESH_HOUR } from '../consts';
import { TIME_FORMAT, REFRESH_TIME, TIME_OUTPUT_TYPE, SHOP_REFRESH_TYPE } from '../consts';
const PER_SECOND = 1 * 1000;
const PER_DAY = 24 * 60 * 60;
const PER_MINUTE = 60;
const PER_HOUR = 60 * 60;
/**
* 时间
* @class
*/
class Time {
WEEK_TO_MS = 7 * 24 * 60 * 60 * 1000;
DAY_TO_HOUR = 24;
DAY_TO_SECOND = 24 * 60 * 60;
DAY_TO_MS = 24 * 60 * 60 * 1000;
HOUR_TO_MINUTE = 60;
HOUR_TO_SECOND = 60 * 60;
HOUR_TO_MS = 60 * 60 * 1000;
MINUTE_TO_MS = 60 * 1000;
SECOND_TO_MS = 1000;
now: Date; // 当前时间
time: Date; // 处理时间原料
outputType: number; // 输出格式
/**
*
* @param {number} outputType 输出格式 1-Date 2-10位时间戳 3-13位时间戳
* @param {Date|number} time 传入的时间如果不传默认为现在可以传Date或10位或13位时间戳
*/
constructor(outputType: TIME_OUTPUT_TYPE, time?: Date|number) {
this.outputType = outputType;
this.now = new Date();
if(time) {
if(typeof time == 'number') {
if(time.toString().length == 10) {
this.time = new Date(time * 1000);
} else {
this.time = new Date(time);
}
} else if (time instanceof Date) {
this.time = time;
}
} else {
this.time = new Date();
}
}
/**
* @description 将得出的时间按输出格式转换
* @param time {Date|number} 时间结果
*/
private _returnResult(time: Date| number) {
if(this.outputType == 1) {
if(typeof time == 'number') {
if(time.toString().length == 10) {
return new Date(time * 1000);
} else if (time.toString().length == 13) {
return new Date(time);
}
} else if (time instanceof Date) {
return time;
}
} else if (this.outputType == 2) {
if(typeof time == 'number') {
if(time.toString().length == 10) {
return time;
} else if (time.toString().length == 13) {
return Math.floor(time / 1000);
}
} else if (time instanceof Date) {
return Math.floor(time.getTime() / 1000);
}
} else if (this.outputType == 3) {
if(typeof time == 'number') {
if(time.toString().length == 10) {
return time * 1000;
} else if (time.toString().length == 13) {
return time;
}
} else if (time instanceof Date) {
return time.getTime();
}
}
}
/**
* @description 设置时间
* @param time 设置的时间
* @param hour 几点
* @param minute 几分
* @param seconds 几秒
*/
private _setHour(time: Date, hour: number, minute = 0, seconds = 0) {
let t = new Date(time);
t.setHours(hour, minute, seconds);
return t;
}
/**
* @description 获得一天的刷新时间如果是5点刷新4点进入的话算前一天
* @param time 设置的时间
* @param hour 几点
* @param minute 几分
* @param seconds 几秒
*/
private _getDayZeroPoint(time: Date, hour = REFRESH_TIME, minute = 0, seconds = 0) {
let t = this._setHour(time, hour, minute, seconds);
if(this.now > t) {
return t;
} else {
return new Date(t.getTime() - this.DAY_TO_MS);
}
}
/**
* 获取一周的某个时间
* @param time 设置的时间
* @param day 周几 周日为0
* @param hour 几点,默认为刷新时间
* @param minute 几分
* @param seconds 几秒
*/
private _getTimeWithWeek(time: Date, day: number, hour = REFRESH_TIME, minute = 0, seconds = 0) {
let dayOfWeek = time.getDay();
if(dayOfWeek == 0) dayOfWeek = 7;
let d = time.getDate();
let y = time.getFullYear(); //当前年
let m = time.getMonth(); //月
let t = new Date(y, m, d - dayOfWeek + day, hour, minute, seconds);
return t;
}
/**
* @description 获取一月的某个时间
* @param time 设置的时间
* @param day 几号
* @param hour 几点,默认为刷新时间
* @param minute 几分
* @param seconds 几秒
*/
private _getTimeWithMonth(time: Date, day: number, hour = REFRESH_TIME, minute = 0, seconds = 0) {
let y = time.getFullYear(); //当前年
let m = time.getMonth(); //月
let t = new Date(y, m, day, hour, minute, seconds);
return t;
}
/**
* @description 计算某个月有几天
* @param year 年份
* @param month 月份0-111月为0
*/
private _countDaysInYearMonth(year: number, month: number){
var date = new Date(year, month, 0);
return date.getDate();
}
/**
* @description 获取几个月前的某一天
* @param time 设置的时间
* @param month 几个月前
* @param day 几号
* @param hour 几点,默认为刷新时间
* @param minute 几分
* @param seconds 几秒
*/
private _getBeforeMonthWithDay(time: Date, month: number, day: number, hour = REFRESH_TIME, minute = 0, seconds = 0) {
let y = time.getFullYear(); //当前年
let m = time.getMonth(); //月
if(m - month < 0) {
m = m - month + 12;
y --;
} else {
m -= month;
}
let days = this._countDaysInYearMonth(y, m);
if(day > days) day = days;
let t = new Date(y, m, day, hour, minute, seconds);
return t;
}
/**
* @description 获取两个日期之间差几天
* @param preDate 前一天
* @param curDate 后一天
*/
private _getDayGap(preDate: Date, curDate: Date) {
let cur = this._getDayZeroPoint(curDate);
let pre = this._getDayZeroPoint(preDate);
return Math.floor((cur.getTime() - pre.getTime()) / this.DAY_TO_MS)
}
/**
* @description 直接获取时间
*/
public getTime() {
return this._returnResult(this.time);
}
/**
* @description 返回某填的指定时分秒
* @param hour 几点
* @param minute 几分
* @param seconds 几秒
*/
public getTimeWithHour(hour = REFRESH_TIME, minute = 0, seconds = 0) {
let t = this._setHour(this.time, hour, minute, seconds);
return this._returnResult(t);
}
/**
* 获取一周的某个时间
* @param time 设置的时间
* @param day 周几 周日为0
* @param hour 几点,默认为刷新时间
* @param minute 几分
* @param seconds 几秒
*/
public getTimeWithWeek(day: number, hour = REFRESH_TIME, minute = 0, seconds = 0) {
let t = this._getTimeWithWeek(this.time, day, hour, minute, seconds);
return this._returnResult(t);
}
/**
* 获取这个月的某个时间
* @param day 几号
* @param hour 几点,默认为刷新时间
* @param minute 几分
* @param seconds 几秒
*/
public getTimeWithMonth(day: number, hour = REFRESH_TIME, minute = 0, seconds = 0) {
let t = this._getTimeWithMonth(this.time, day, hour, minute, seconds);
return this._returnResult(t);
}
/**
* @description 获得一天的刷新时间如果是5点刷新4点进入的话算前一天
* @param hour 几点,默认为刷新时间
* @param minute 几分
* @param seconds 几秒
*/
public getDayZeroPoint(hour = REFRESH_TIME, minute = 0, seconds = 0) {
let t = this._getDayZeroPoint(this.time, hour, minute, seconds);
return this._returnResult(t);
}
/**
* @description 获得一周的刷新时间如果是5点刷新4点进入的话算前一周
* @param day 星期几
* @param hour 几点,默认为刷新时间
* @param minute 几分
* @param seconds 几秒
*/
public getWeekZeroPoint(day: number = 1, hour = REFRESH_TIME, minute = 0, seconds = 0) {
let t = this._getTimeWithWeek(this.time, day, hour, minute, seconds);
if(this.now > t) {
return this._returnResult(t);
} else {
return this._returnResult(t.getTime() - this.WEEK_TO_MS);
}
}
/**
* @description 获得一个月的刷新时间如果是5点刷新4点进入的话算前一月
* @param day 几号
* @param hour 几点,默认为刷新时间
* @param minute 几分
* @param seconds 几秒
*/
public getMonthZeroPoint(day: number = 1, hour = REFRESH_TIME, minute = 0, seconds = 0) {
let t = this._getTimeWithWeek(this.time, day, hour, minute, seconds);
if(this.now > t) {
return this._returnResult(t);
} else {
let tt = this._getBeforeMonthWithDay(this.time, 1, day, hour, minute, seconds);
return this._returnResult(tt);
}
}
/**
* @description 获取几天前的指定时分秒
* @param day 几天前如果是输入3号3点5点刷新1天前指1号5点
* @param hour 几点,默认为刷新时间
* @param minute 几分
* @param seconds 几秒
*/
public getBeforeDayWithHour(day: number = 0, hour = REFRESH_TIME, minute = 0, seconds = 0) {
let t = this._setHour(this.time, hour, minute, seconds);
if(this.time > t) {
let timestamp = t.getTime() - day * this.DAY_TO_MS;
return this._returnResult(timestamp);
} else {
let timestamp = t.getTime() - (day + 1) * this.DAY_TO_MS;
return this._returnResult(timestamp);
}
}
/**
* @description 获取几天后的指定时分秒如果是指定5点刷新6点进入的话算后一天
* @param day 几天后如果是输入3号6点5点刷新1天后指5号5点
* @param hour 几点,默认为刷新时间
* @param minute 几分
* @param seconds 几秒
*/
public getAfterDayWithHour(day: number = 0, hour = REFRESH_TIME, minute = 0, seconds = 0) {
let t = this._setHour(this.time, hour, minute, seconds);
if(this.time > t) {
let timestamp = t.getTime() + (day + 1) * this.DAY_TO_MS;
return this._returnResult(timestamp);
} else {
let timestamp = t.getTime() + day * this.DAY_TO_MS;
return this._returnResult(timestamp);
}
}
/**
* @description 获取某个时间的纯粹的几天前
* @param day 几天前
*/
public getBeforeDay(day: number) {
let timestamp = this.time.getTime() - day * this.DAY_TO_MS;
return this._returnResult(timestamp);
}
/**
* @description 获取某个时间的纯粹的几天前
* @param day 几天后
*/
public getAfterDay(day: number) {
let timestamp = this.time.getTime() + day * this.DAY_TO_MS;
return this._returnResult(timestamp);
}
/**
* @description 获取某个时间的纯粹的几小时前
* @param hour 几小时前
*/
public getBeforeHour(hour: number) {
let timestamp = this.time.getTime() - hour * this.HOUR_TO_MS;
return this._returnResult(timestamp);
}
/**
* @description 获取某个时间的纯粹的几分钟前
* @param hour 几分钟前
*/
public getBeforeMinute(minute: number) {
let timestamp = this.time.getTime() - minute * this.MINUTE_TO_MS;
return this._returnResult(timestamp);
}
/**
* @description 获取某个时间的几秒前
* @param seconds 几秒前
*/
public getBeforeSeconds(seconds: number) {
let timestamp = this.time.getTime() - seconds;
return this._returnResult(timestamp);
}
/**
* 获取今天距离preDate整数个day天之后的时间
* @param preDate 前一个时间点
* @param day 几天
*/
public getAfterDayByGap(preDate: Date, day: number) {
let gap = this._getDayGap(preDate, this.time);
let n = Math.floor(gap / day);
return this.getAfterDayWithHour(n * day);
}
/**
* @description 获取某个日期到今天之间差几天
*/
public getDayGap() {
return this._getDayGap(this.now, this.time);
}
/**
* 检查某个时间距离今天是否在day天以内
* @param day day天以内
*/
public checkDay(day: number = 1) {
if (this.time.getTime() - this.now.getTime() <= day * this.DAY_TO_MS) {
return true;
}
return false;
}
}
/**
* @description 获取时间对象10位时间戳
* @param time 输入时间
*/
export function getTimeFun(time?: number|Date) {
let t = new Time(TIME_OUTPUT_TYPE.STAMP_10, time);
return t
}
/**
* @description 获取时间对象13位时间戳
* @param time 输入时间
*/
export function getTimeFunM(time?: number|Date) {
let t = new Time(TIME_OUTPUT_TYPE.STAMP_13, time);
return t
}
/**
* @description 获取时间对象Date格式
* @param time 输入时间
*/
export function getTimeFunD(time?: number|Date) {
let t = new Time(TIME_OUTPUT_TYPE.DATE, time);
return t
}
/**
* @description 将某个Date格式转换为10位时间戳
* @param time 时间
*/
export function getSeconds(time: Date) {
return Math.floor(time.getTime() / PER_SECOND);
let t = new Time(TIME_OUTPUT_TYPE.STAMP_10, time);
return <number>t.getTime();
}
/**
* @description 获取现在的10位时间戳时间
*/
export function nowSeconds() {
return Math.floor(Date.now() / PER_SECOND );
let t = new Time(TIME_OUTPUT_TYPE.STAMP_10);
return <number>t.getTime();
}
export function getTodayZeroPoint(hour = REFRESH_TIME) {
var date = new Date();
date.setHours(hour);
date.setMinutes(0);
date.setSeconds(0);
var time = Math.floor(date.getTime() / PER_SECOND);
return time;
}
export function checkTodayTime(seasonEndTime: number) {
if (seasonEndTime - nowSeconds() <= PER_DAY) {
return true;
/**
* 获取刷新时间点 10位时间戳
* @param refreshType 刷新类型,每天/每周/每月,默认每天
*/
export function getZeroPoint(refreshType: SHOP_REFRESH_TYPE = SHOP_REFRESH_TYPE.DAILY) {
let t = new Time(TIME_OUTPUT_TYPE.STAMP_10);
if(refreshType == SHOP_REFRESH_TYPE.DAILY) {
return <number>t.getDayZeroPoint();
} else if (refreshType == SHOP_REFRESH_TYPE.WEEKLY) {
return <number>t.getWeekZeroPoint();
} else if (refreshType == SHOP_REFRESH_TYPE.MONTHLY) {
return <number>t.getMonthZeroPoint();
}
return false;
}
export function getBeforeDayDate(day: number) {
let time = getTodayZeroPoint() - day * PER_DAY;
return time;
}
/**
* 获取几天以前(按秒获取)
* @param day 几天以前
* 获取刷新时间点 Date类型
* @param refreshType 刷新类型,每天/每周/每月,默认每天
*/
export function getBeforeDaySeconds(day: number) {
let time = nowSeconds() - day * PER_DAY;
return time;
}
export function getBeforeHourSeconds(hour: number) {
let time = nowSeconds() - hour * PER_HOUR;
return time;
}
export function getBeforeMinuteSeconds(minute: number) {
let time = nowSeconds() - minute * PER_MINUTE;
return time;
}
export function getBeforeSeconds(seconds: number) {
let time = nowSeconds() - seconds;
return time;
}
export function getCurWeekDate(day: number, hour: number) {
return getWeekDate(new Date(), day, hour);
}
export function getWeekDate(now: Date, day: number, hour: number){ //获得本周的开端日期
var nowDayOfWeek = now.getDay();
if(nowDayOfWeek == 0) nowDayOfWeek = 7;
let nowDay = now.getDate();
let nowYear = now.getFullYear(); //当前年
let nowMonth = now.getMonth(); //月
return new Date(nowYear, nowMonth, nowDay - nowDayOfWeek + day, hour);
};
export function getCurWeekTime(day: number, hour: number) {
let data = getWeekDate(new Date(), day, hour);
return Math.floor(data.getTime()/PER_SECOND);
}
export function getCurMonthDate(day: number, hour: number) {
return getMonthDate(new Date(), day, hour);
}
export function getCurMonthTime(day: number, hour: number) {
let data = getMonthDate(new Date(), day, hour);
return Math.floor(data.getTime()/PER_SECOND);
}
/**
* @description 获取某个时间的当月的某一天的某一时
* @param {{Date}} now 时间
* @param {{number}} day 哪天
* @param {{number}} hour 几点
*/
export function getMonthDate(now: Date, day: number, hour: number){ //获得本周的开端日期
let nowYear = now.getFullYear(); //当前年
let nowMonth = now.getMonth(); //月
return new Date(nowYear, nowMonth, day, hour);
};
export function getHourPoint(hour: number) {
var date = new Date();
date.setHours(hour);
date.setMinutes(0);
date.setSeconds(0);
var time = Math.floor(date.getTime() / PER_SECOND);
if (nowSeconds() < time) {
return time - PER_DAY;
export function getZeroPointD(refreshType: SHOP_REFRESH_TYPE = SHOP_REFRESH_TYPE.DAILY) {
let t = new Time(TIME_OUTPUT_TYPE.DATE);
if(refreshType == SHOP_REFRESH_TYPE.DAILY) {
return <Date>t.getDayZeroPoint();
} else if (refreshType == SHOP_REFRESH_TYPE.WEEKLY) {
return <Date>t.getWeekZeroPoint();
} else if (refreshType == SHOP_REFRESH_TYPE.MONTHLY) {
return <Date>t.getMonthZeroPoint();
}
return time;
}
export function getCurHourPoint(hour: number, minute: number = 0, seconds: number = 0) {
var date = new Date();
date.setHours(hour);
date.setMinutes(minute);
date.setSeconds(seconds);
var time = Math.floor(date.getTime() / PER_SECOND);
return time;
}
/**
* 获取第2天凌晨几点的时间戳
* @param hour
* 根据 yy-dd-mm格式获取年龄
*
* @param {string} birthday
*/
export function getNextHourPoint(hour: number) {
var date = new Date();
date.setHours(hour);
date.setMinutes(0);
date.setSeconds(0);
var time = Math.floor(date.getTime() / PER_SECOND);
if (nowSeconds() > time) {
return time + PER_DAY;
}
return time;
}
/**
* 返回今天的某个时间点
* @param time
* @param hour
*/
export function getTodayZeroDate(hour = 0) {
return getZeroDate(new Date(), hour);
}
/**
* 根据给定的时间获得某个时间点
* @param time
* @param hour
*/
export function getZeroDate(time: Date, hour = 0) {
let date = new Date(time.getTime());
date.setHours(hour);
date.setMinutes(0);
date.setSeconds(0);
return date;
}
export function getZeroDateByDeltaDay(delta: number) {
var date = new Date(new Date().getTime() + delta * PER_DAY * PER_SECOND);
date.setHours(0);
date.setMinutes(0);
date.setSeconds(0);
return date;
}
export function getAge(birthday: string) {
let d = new Date(birthday + ' 00:00:00');
let _year = d.getFullYear();
@@ -187,7 +488,12 @@ export function getAge(birthday: string) {
return age
}
export function formatTime(d: Date, type: number) {
/**
* 将Date格式的数据转为string格式
* @param {Date} d 时间
* @param {TIME_FORMAT} type 类型
*/
export function formatTime(d: Date, type: TIME_FORMAT) {
let year = d.getFullYear();
let month = d.getMonth() + 1;
let day = d.getDate();
@@ -202,21 +508,6 @@ export function formatTime(d: Date, type: number) {
}
}
/**
* @description 获取指定时间后的某个时间点,如给定 date 后的晚八点整
* @export
* @param {Date} date 给定时间
* @param {number} h 给定小时
* @param {number} [m=0] 给定分钟
* @param {number} [s=0] 给定秒
* @returns {Date}
*/
export function getNextTime(date: Date, h: number, m = 0, s = 0, ms = 0): Date {
const milliseconds = date.getTime();
const timeToday = new Date(milliseconds).setHours(h, m, s, ms);
return timeToday >= milliseconds ? new Date(timeToday) : new Date(timeToday + PER_DAY * PER_SECOND);
}
/**
* 获得某个时间是星期几
* @param needHandle 是否处理周日
@@ -241,37 +532,3 @@ export function setWeek(d?: number) {
week = d;
if(d == 7) week = 0;
}
/**
*
* @param preDate
* @param curDate
*/
export function getDayGap(preDate: Date, curDate: Date) {
let cur = getZeroDate(curDate, REFRESH_HOUR);
let pre = getZeroDate(preDate, REFRESH_HOUR);
return Math.floor((cur.getTime() - pre.getTime()) / PER_DAY / PER_SECOND)
}
/**
* 获取某一天的 n * day 天之后
* @param preDate
* @param curDate
* @param day
*/
export function getNextDayByGap(preDate: Date, curDate: Date, day: number) {
let gap = getDayGap(preDate, curDate);
let n = Math.floor(gap / day);
let time = getAfterDateByDay(preDate, n * day);
return new Date(time * PER_SECOND);
}
/**
* 获取某个时间的 day 天之后
* @param day
*/
export function getAfterDateByDay(preDate: Date, day: number) {
let time = getZeroDate(preDate, REFRESH_HOUR).getTime() + day * PER_DAY * PER_SECOND;
return Math.floor(time/PER_SECOND);
}

View File

@@ -4,10 +4,10 @@ import { HeroModel, HeroType } from '../db/Hero';
import fs = require('fs');
import path = require('path');
import { HERO_CE_RATIO, ABI_STAGE, GACHA_TO_FLOOR } from '../consts';
import { HERO_CE_RATIO, ABI_STAGE, GACHA_TO_FLOOR, TIME_OUTPUT_TYPE, REFRESH_TIME } from '../consts';
import { findIndex } from 'underscore';
import { getWeekDate } from './timeUtil';
import { getTimeFunM } from './timeUtil';
import { Floor } from '../domain/activityField/gachaField';
const randomName = require("chinese-random-name");
const moment = require('moment');
@@ -130,7 +130,7 @@ export function deltaDays(preTime: Date, proTime: Date): number {
* @param hour 几点刷新
* @param deltaDay 间隔几天刷新,默认每天刷新(deltaDay = 1)
*/
export function shouldRefresh(preTime: Date, now: Date, hour: number, deltaDay = 1): boolean {
export function shouldRefresh(preTime: Date, now: Date, hour: number = REFRESH_TIME, deltaDay = 1): boolean {
if (!preTime) return true;
let curTime = new Date(now.getTime());
let refreshTime = new Date(now.getTime());
@@ -151,40 +151,17 @@ export function shouldRefresh(preTime: Date, now: Date, hour: number, deltaDay =
* @param hour 几点刷新
* @param deltaDay 间隔几天刷新,默认每天刷新(deltaDay = 1)
*/
export function shouldRefreshWeek(preTime: Date, now: Date, day: number, hour: number, deltaWeek = 1): boolean {
export function shouldRefreshWeek(preTime: Date, now: Date, day: number = 1, hour: number = REFRESH_TIME, deltaWeek = 1): boolean {
if (!preTime) return true;
let curTime = new Date(now.getTime());
let refreshTime = getWeekDate(now, day, hour);
let refeshTime = refreshTime.getTime();
let refreshTime = <number>getTimeFunM(now).getTimeWithWeek(day, hour);
if (refeshTime - preTime.getTime() > (deltaWeek >= 1 ? deltaWeek - 1 : 0) * 7 * 24 * 60 * 60 * 1000 && curTime.getTime() >= refeshTime) {
if (refreshTime - preTime.getTime() > (deltaWeek >= 1 ? deltaWeek - 1 : 0) * 7 * 24 * 60 * 60 * 1000 && curTime.getTime() >= refreshTime) {
return true;
}
return false;
}
/**
* 获取 x天后的y点
* @param curTime 现在时间
* @param hour 几点刷新
*/
export function getRefTime(now = new Date(), checkHour: number, day = 0) {
let curTime = new Date(now.getTime());
if (checkHour < 0) {
checkHour = 24 + checkHour;
if (curTime.getHours() >= checkHour) {
curTime.setDate(curTime.getDate() + 1);
}
} else {
if (curTime.getHours() < checkHour) {
curTime.setDate(curTime.getDate() - 1);
}
}
let today = curTime.setHours(checkHour, 0, 0, 0);;
return new Date(today + day * 24 * 60 * 60 * 1000);
}
/**
* 从一个数组中随机返回不重复的 cnt 个元素数组
* @param source 原数组