All files / dates/src add.ts

100% Statements 19/19
100% Branches 7/7
100% Functions 1/1
100% Lines 18/18

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40                  5x 16x 16x   16x 15x 4x   15x 4x   15x 4x   15x 4x     15x   15x 4x   15x 4x       16x    
export interface IDateAddOptions {
    years?: number;
    months?: number;
    days?: number;
    hours?: number;
    minutes?: number;
    seconds?: number;
}
 
export const add = (date: Date, options?: IDateAddOptions): Date => {
    let newDate = new Date(date);
    let nbOfSecondsToAdd = 0;
 
    if (options != null) {
        if (options.days != null) {
            nbOfSecondsToAdd += options.days * 60 * 60 * 24;
        }
        if (options.hours != null) {
            nbOfSecondsToAdd += options.hours * 60 * 60;
        }
        if (options.minutes != null) {
            nbOfSecondsToAdd += options.minutes * 60;
        }
        if (options.seconds != null) {
            nbOfSecondsToAdd += options.seconds;
        }
 
        newDate = new Date(date.getTime() + nbOfSecondsToAdd * 1000);
 
        if (options.months != null) {
            newDate = new Date(newDate.setMonth(newDate.getMonth() + options.months));
        }
        if (options.years != null) {
            newDate = new Date(newDate.setFullYear(newDate.getFullYear() + options.years));
        }
    }
 
    return newDate;
};