Skip to content

Instantly share code, notes, and snippets.

@talesmgodois
Last active October 5, 2020 17:03
Show Gist options
  • Save talesmgodois/8897b9ea45bb93c4c845a8feb1182855 to your computer and use it in GitHub Desktop.
Save talesmgodois/8897b9ea45bb93c4c845a8feb1182855 to your computer and use it in GitHub Desktop.
import { addMinutes, addHours, addDays } from "date-fns";
export enum EFrequency {
EVERY_10_MINUTES = 'EVERY_10_MINUTES',
EVERY_HOUR = 'EVERY_HOUR',
EVERY_DAY = 'EVERY_DAY'
}
export class Frequency {
public frequencyType: EFrequency;
public time: string | number;
constructor(frequencyType: EFrequency, time: Date| number) {
this.frequencyType = frequencyType;
this.time = time;
}
}
class Task {
public frequency: Frequency;
public action: any;
getScheduleTime(currentTime = new Date()): Date {
const year = currentTime.getFullYear();
const month = currentTime.getMonth();
const date = currentTime.getDate();
let hour, minutes;
switch(this.frequency.frequencyType) {
case EFrequencyType.EVERY_10_MINUTES:
minutes = currentTime.getMinutes();
const rest = minutes % 10;
return addMinutes(new Date(
year, month, date,
currentTime.getHours(),
currentTime.getMinutes(),
0
), (10 - rest));
case EFrequencyType.EVERY_HOUR:
minutes = this.frequency.time;
hour = currentTime.getHours();
const dt = new Date(
year, month, date,
hour,
minutes,
0
);
return minutes > currentTime.getMinutes() ? dt: addHours(dt, 1);
case EFrequencyType.EVERY_DAY:
const timeArray = this.frequency.time.toString().split(":");
hour = + timeArray[0]
minutes = +timeArray[1];
const frequencyDate = new Date(
year, month, date,
hour,
minutes,
0
)
return currentTime > frequencyDate ? addDays(frequencyDate, 1) : frequencyDate;
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment