LoginSignup
0
0

More than 1 year has passed since last update.

Classes that return today's relationship to deadlines【Angular】

Last updated at Posted at 2022-05-14
import { Injectable } from '@angular/core';
import * as moment from 'moment';

type DeadlineType = {
    date: string; // YYYY/MM/DD
    time: string; // HH:mm || 'none'
};

@Injectable({ providedIn: 'root' })
export class Deadline {
    isPast(deadline: DeadlineType): boolean {
        const todayTime = new Date().getTime();
        const deadlineTime = new Date(this._formatDate(deadline)).getTime();

        return todayTime > deadlineTime;
    }

    isToday(deadline: DeadlineType): boolean {
        const todayDate = moment().format('YYYY/MM/DD');

        return todayDate === deadline.date;
    }

    isWithinOneWeek(deadline: DeadlineType): boolean {
        const todayTime = new Date().getTime();
        const deadlineTime = new Date(this._formatDate(deadline)).getTime();
        const oneWeekBeforeDeadlineTime = new Date(
            this._formatDateOneWeekAgo(deadline)
        ).getTime();

        return (
            todayTime > oneWeekBeforeDeadlineTime && todayTime < deadlineTime
        );
    }

    private _formatDate(deadline: DeadlineType): string {
        return `${moment(deadline.date).format('YYYY-MM-DD')}T${
            deadline.time === 'none' ? '00:00' : deadline.time
        }:00`;
    }

    private _formatDateOneWeekAgo(deadline: DeadlineType): string {
        return `${moment(deadline.date)
            .subtract(7, 'd')
            .format('YYYY-MM-DD')}T${
            deadline.time === 'none' ? '00:00' : deadline.time
        }:00`;
    }
}
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0