Индикаторы даты / времени, использующие момент js [начало, конец, остаток] и множественное число - PullRequest
0 голосов
/ 20 февраля 2020

Я работаю над инкубатором времени / даты - и пытаюсь точно настроить текущую базу кода - рекурсивную функцию, - но также включаю обработку множественного числа. Поэтому вместо 1 минуты - 1 минута.

Я также хочу улучшить функции const utils для тонкой настройки - добавить переменную для обработки единиц измерения.

export const timeRemaining = (endDate, unit) => {
    return moment(endDate).diff(moment(), unit);
};
export const timeRan = (startDate, unit) => {
    return moment().diff(moment(startDate), unit);
};
export const totalTime = (date1, date2, unit) => {
    return moment(date2).diff(moment(date1), unit);
};

текущая кодовая база

getCampaignProgress = (startTime, endTime) => {
    if (!this.hasCampaignStarted(startTime, 'days')) {
        return 'Start in ' + timeRemaining(startTime, 'days') + ' days';
    }
    if (this.hasCampaignFinished(endTime, 'days')) {
        return 'Finished ' + Math.abs(timeRemaining(endTime, 'days')) + ' days ago';
    }

    //ends today
    if (timeRemaining(endTime, 'days') === 0) {

        if (timeRan(startTime, 'hours') < 0) {
            return 'Start in ' +
                Math.abs(timeRan(startTime, 'hours')) +
                ' hours';
        }
        if (timeRemaining(endTime, 'hours') < 0) {
            return (
                'Finished ' +
                Math.abs(timeRemaining(endTime, 'hours')) +
                ' hours ago'
            );
        } else {
            if (timeRemaining(endTime, 'hours') === 0) {
                if (timeRan(startTime, 'minutes') < 0) {
                    return (
                        'Start in ' +
                        Math.abs(timeRan(startTime, 'minutes')) +
                        ' mins'
                    );
                }

                if (timeRemaining(endTime, 'minutes') < 0) {
                    return (
                        'Finished ' +
                        Math.abs(timeRemaining(endTime, 'minutes')) +
                        ' mins ago'
                    );
                } else {
                    if (timeRemaining(endTime, 'minutes') === 0) {
                        if (timeRan(startTime, 'seconds') < 0) {
                            return (
                                'Start in ' +
                                Math.abs(timeRan(startTime, 'seconds')) +
                                ' seconds'
                            );
                        }

                        if (timeRemaining(endTime, 'seconds') < 0) {
                            return (
                                'Finished ' +
                                Math.abs(timeRemaining(endTime, 'seconds')) +
                                ' seconds ago'
                            );
                        } else {
                            return (
                                'Seconds remaining ' +
                                timeRemaining(endTime, 'seconds')
                            );
                        }
                    }

                    return 'Minutes remaining ' + timeRemaining(endTime, 'minutes');
                }
            }

            return 'Hours remaining ' + timeRemaining(endTime, 'hours');
        }
    }

    return 'Days remaining ' + timeRemaining(endTime, 'days');
};
...