카테고리 없음

[javaScript] 타이머 만들기

푸루닉 2023. 7. 25. 17:43

해당 로직은 만들다 폐기된 로직이다. 나름 열심히 만들었는데 폐기된 것이 아까워 티스토리에 공유하고자 한다.

 

var loginTimeElement = $("#loginTime");
var consultationTimeElement = $("#consultationTime");
var restTimeElement = $("#breakTime");
var state = $("#areaUserStatus");

// 시작 시간과 상담 시간을 가져옴
$.ajax({
    url: '/main/getAuthId',
    method: 'GET',
    success: function(response) {
        console.log(response + "footer")
        var loginTime = response.loginTm;
        var consultationTime = response.consultTm;
        var restTime = response.restTm;
        console.log(loginTime)
        console.log(consultationTime)
        console.log(restTime + "footer")

        // 로그인 시간을 시, 분, 초로 분리하여 정수로 변환
        var loginTimeParts = loginTime.split(":");
        var loginHours = parseInt(loginTimeParts[0]);
        var loginMinutes = parseInt(loginTimeParts[1]);
        var loginSeconds = parseInt(loginTimeParts[2]);

        // 상담 시간을 시, 분, 초로 분리하여 정수로 변환
        var consultationTimeParts = consultationTime.split(":");
        var consultationHours = parseInt(consultationTimeParts[0]);
        var consultationMinutes = parseInt(consultationTimeParts[1]);
        var consultationSeconds = parseInt(consultationTimeParts[2]);

        // 이석 시간을 시, 분, 초로 분리하여 정수로 변환
        var restTimeParts = restTime.split(":");
        var restHours = parseInt(restTimeParts[0]);
        var restMinutes = parseInt(restTimeParts[1]);
        var restSeconds = parseInt(restTimeParts[2]);

        var loginIntervalId;
        var consultationIntervalId;
        var restIntervalId;

        // 로그인 시간을 1초마다 증가시키고 표시하는 interval 설정
        loginIntervalId = setInterval(function() {
            loginSeconds++;
            if (loginSeconds >= 60) {
                loginSeconds = 0;
                loginMinutes++;
                if (loginMinutes >= 60) {
                    loginMinutes = 0;
                    loginHours++;
                    if (loginHours >= 24) {
                        loginHours = 0;
                    }
                }
            }
            var formattedLoginTime = formatTime(loginHours, loginMinutes, loginSeconds);
            loginTimeElement.text(formattedLoginTime);
        }, 1000);

        // 상담 시간을 1초마다 증가시키고 표시하는 interval 설정 (상담 시간이 READY일 때만)
        if (state.val() === 'READY') {
            consultationIntervalId = setInterval(function() {
                consultationSeconds++;
                if (consultationSeconds >= 60) {
                    consultationSeconds = 0;
                    consultationMinutes++;
                    if (consultationMinutes >= 60) {
                        consultationMinutes = 0;
                        consultationHours++;
                        if (consultationHours >= 24) {
                            consultationHours = 0;
                        }
                    }
                }

                var formattedConsultationTime = formatTime(consultationHours, consultationMinutes, consultationSeconds);
                consultationTimeElement.text(formattedConsultationTime);
            }, 1000);
        }   else {
            clearInterval(consultationIntervalId); // READY가 아닌 경우 상담 시간 interval 중지
            consultationIntervalId = setInterval(function() {
                var formattedConsultationTime = formatTime(consultationHours, consultationMinutes, consultationSeconds);
                consultationTimeElement.text(formattedConsultationTime);
            }, 1000);
        }

        // 상태 변경 시 상담 시간 interval 처리
        state.on('change', function() {
            if (state.val() === 'LOGIN' || state.val() === 'REST01' || state.val() === 'AFTERWORK') {
                clearInterval(consultationIntervalId); // REST01인 경우 상담 시간 interval 중지
            } else if (state.val() === 'READY') {
                consultationIntervalId = setInterval(function() {
                    consultationSeconds++;
                    if (consultationSeconds >= 60) {
                        consultationSeconds = 0;
                        consultationMinutes++;
                        if (consultationMinutes >= 60) {
                            consultationMinutes = 0;
                            consultationHours++;
                            if (consultationHours >= 24) {
                                consultationHours = 0;
                            }
                        }
                    }
                    var formattedConsultationTime = formatTime(consultationHours, consultationMinutes, consultationSeconds);
                    consultationTimeElement.text(formattedConsultationTime);
                }, 1000);
            }
        });

        // 이석 시간을 1초마다 증가시키고 표시하는 interval 설정 (상담 시간이 REST01이 아닐 때만)
        if(state.val() === 'REST01') {
            restIntervalId = setInterval(function() {
                restSeconds++;
                if (restSeconds >= 60) {
                    restSeconds = 0;
                    restMinutes++;
                    if (restMinutes >= 60) {
                        restMinutes = 0;
                        restHours++;
                        if (restHours >= 24) {
                            restHours = 0;
                        }
                    }
                }
                var formattedConsultationTime = formatTime(restHours, restMinutes, restSeconds);
                restTimeElement.text(formattedConsultationTime);
            }, 1000);
        } else {
            restIntervalId = setInterval(function() {
                var formattedConsultationTime = formatTime(restHours, restMinutes, restSeconds);
                restTimeElement.text(formattedConsultationTime);
            }, 1000);
        }

        // 이석 변경 시 상담 시간 interval 처리
        state.on('change', function() {
            if (state.val() === 'LOGIN' || state.val() === 'READY' || state.val() === 'AFTERWORK') {
                clearInterval(restIntervalId); // REST01인 경우 상담 시간 interval 중지
            } else if (state.val() === 'REST01') {
                restIntervalId = setInterval(function() {
                    restSeconds++;
                    if (restSeconds >= 60) {
                        restSeconds = 0;
                        restMinutes++;
                        if (restMinutes >= 60) {
                            restMinutes = 0;
                            restHours++;
                            if (restHours >= 24) {
                                restHours = 0;
                            }
                        }
                    }
                    var formattedConsultationTime = formatTime(restHours, restMinutes, restSeconds);
                    restTimeElement.text(formattedConsultationTime);
                }, 1000);
            }
        });

    }
});

// 시, 분, 초를 형식에 맞게 조합하여 반환하는 함수
function formatTime(hours, minutes, seconds) {
    return ('0' + hours).slice(-2) + ':' + ('0' + minutes).slice(-2) + ':' + ('0' + seconds).slice(-2);
}