날짜계산기 완벽 가이드|D-Day, 날짜 더하기·빼기, 음력 변환까지 한 번에
날짜계산기 사용법부터 D-Day, 날짜 더하기·빼기, 음력 변환까지! 정확한 일정 계산을 도와주는 날짜 계산기의 모든 기능을 정리했습니다.1. 날짜계산기란?날짜계산기는 두 날짜 간 차이 계산, 날짜 더하기·빼기, D-Day, 음력·양력 변환, 윤년 여부 판별, 근무일 계산 등 날짜와 관련된 다양한 연산을 자동으로 처리해주는 도구입니다.프로젝트 마감일, 휴가 일정, 기념일 계산, 출산 예정일, 전역일 확인 등 일상생활 및 업무에서 매우 유용하게 활용됩니다.2. 날짜계산기 주요 기능 기능 항목 설명 두 날짜 사이 계산기시작일과 종료일 사이의 일수, 주수, 월수, 년수 계산 가능날짜 더하기 계산기기준 날짜에서 연/월/주/일을 더하여 미래 날짜 산출날짜 빼기 계산기기준 날짜에서 일수를 빼 과거 날짜 계산D-D..
2025. 5. 10.
연봉퍼센트계산기 완전 정복|인상률 계산부터 실수령액까지 한 번에!
연봉퍼센트계산기로 인상률, 인상액, 실수령액을 쉽고 빠르게 계산하세요. 이직, 승진, 연봉 협상 시 필수 도구!1. 연봉퍼센트계산기란?연봉퍼센트계산기는 현재 연봉을 기준으로 인상률이나 인상액을 입력하면, 자동으로 인상된 연봉과 세후 실수령액까지 계산해주는 실용적인 도구입니다.이직, 승진, 연봉 협상 시 사용하면 자신의 급여 변화율을 명확히 파악할 수 있어 많은 직장인들에게 필수로 여겨집니다.활용 예시:연봉 5,000만 원 → 10% 인상 → 연봉퍼센트계산기로 계산 시: 5,500만 원 + 실수령액 자동 산출!2. 연봉 인상률 공식과 예시1) 인상률 계산 공식인상률(%) = (인상 후 연봉 - 기존 연봉) ÷ 기존 연봉 × 100예시:기존 연봉이 5,000만 원이고인상 후 연봉이 5,500만 원인 경우:(..
2025. 5. 10.
2025 월평균소득 확인방법 6가지|연봉 계산법부터 중위소득 비교까지 총정리
홈택스, 손택스, 건강보험공단 활용해서 월 평균소득 간편하게 확인하는 최신가이드2025년 기준으로 월평균소득을 정확히 확인하는 방법이 달라졌습니다.홈택스, 국민건강보험공단, 정부24 등 주요 기관의 시스템 개편과 증명서 명칭 변경으로 인해 최신 정보에 맞춘 조회와 증명서 발급이 필수입니다.이 글에서는 월평균소득 확인방법 6가지, 연봉 계산 공식, 중위소득 비교 기준까지 모두 한눈에 볼 수 있도록 정리했습니다.1. 월평균소득이란?월평균소득은 개인이 1년 동안 벌어들인 총 소득(근로, 사업, 재산, 기타)을 12개월로 나눈 값으로, 정부지원금, 청약, 대출 심사, 건강보험료 책정 기준 등 다양한 공공 및 금융서비스에 사용됩니다.2. 2025 월평균소득 확인방법 6가지1) 소득금액증명원 (홈택스, 손택스)가장..
2025. 4. 25.
setTimeout(function () {
const dragSensitivity = 0.55; // 드래그 민감도
const clickTolerance = 0; // 클릭 간주 기준 (px), 0: 클릭 시 이동 안함. 클릭 시 이동하려면 1~3값 설정 고려.
const dragRatioThreshold = 0.55; // 배너 너비 대비 드래그 비율, 배너 드래그 후 드롭 시.
const newWindow = 1; // 1: 새 창, 0: 현재 창
const bannerConfigs = [
{
selector: '.sliding-banner-300',
width: 300,
height: 300,
id: '940041',
trackingCode: 'AF2787934', // 본인의 추적 코드로 대체
subId: '',
tsource: '',
background: 'https://tistory1.daumcdn.net/tistory/8074023/skin/images/600x600-back2.jpg',
cover: 'https://tistory1.daumcdn.net/tistory/8074023/skin/images/WOW-30Ox25O-cover-left.png',
arrowIcon: 'https://tistory1.daumcdn.net/tistory/8074023/skin/images/arrowbtn.png',
dragDirection: 'left'
},
{
selector: '.sliding-banner-150',
width: 320,
height: 150,
id: '940041',
trackingCode: 'AF2787934', // 본인의 추적 코드로 대체
subId: '',
tsource: '',
background: 'https://tistory1.daumcdn.net/tistory/8074023/skin/images/640x300-back2.jpg',
cover: 'https://tistory1.daumcdn.net/tistory/8074023/skin/images/WOW-32Ox15O-cover-left.png',
arrowIcon: 'https://tistory1.daumcdn.net/tistory/8074023/skin/images/arrowbtn.png',
dragDirection: 'left'
},
{
selector: '.sliding-banner-250',
width: 300,
height: 250,
id: '940041',
trackingCode: 'AF2787934', // 본인의 추적 코드로 대체
subId: '',
tsource: '',
background: 'https://tistory1.daumcdn.net/tistory/8074023/skin/images/600x500-back2.jpg',
cover: 'https://tistory1.daumcdn.net/tistory/8074023/skin/images/WOW-30Ox25O-cover-left.png',
arrowIcon: 'https://tistory1.daumcdn.net/tistory/8074023/skin/images/arrowbtn.png',
dragDirection: 'left'
},
{
selector: '.sliding-banner-280',
width: 336,
height: 280,
id: '940041',
trackingCode: 'AF2787934', // 본인의 추적 코드로 대체
subId: '',
tsource: '',
background: 'https://tistory1.daumcdn.net/tistory/8074023/skin/images/600x500-back3.jpg',
cover: 'https://tistory1.daumcdn.net/tistory/8074023/skin/images/WOW-30Ox25O-cover-right.png',
arrowIcon: 'https://tistory1.daumcdn.net/tistory/8074023/skin/images/arrow-right.png',
dragDirection: 'right'
}
];
const coupangLink = 'https://link.coupang.com/a/c2PToW'; // 본인의 간편 링크로 대체 📍
function openLink(link) {
if (newWindow) {
window.open(link, '_blank');
} else {
history.replaceState(null, null, window.location.href);
window.location.href = link;
}
}
function generateIframeURL(config) {
return `https://ads-partners.coupang.com/widgets.html?id=${config.id}&template=carousel&trackingCode=${config.trackingCode}&subId=${encodeURIComponent(config.subId || '')}&width=${config.width}&height=${config.height}&tsource=${encodeURIComponent(config.tsource || '')}`;
}
function createBanner(config) {
const iframeURL = generateIframeURL(config);
const wrapper = document.createElement('div');
wrapper.innerHTML = `
당겨주세요!
`;
return wrapper;
}
// trigger event update
function setupDragEvents(dragTarget, animatedBanner, threshold, link, direction) {
let startX = 0, diffX = 0, triggered = false, isDragging = false;
function getClientX(e) {
return e.type.includes('touch') ? e.touches[0].clientX : e.clientX;
}
function triggerOnce() {
if (triggered) return;
triggered = true;
animatedBanner.style.transform = 'translateX(0)';
animatedBanner.classList.add('active');
openLink(link);
}
function startDrag(e) {
if (e.type.startsWith('mouse') && e.button !== 0) return;
isDragging = true;
startX = getClientX(e);
diffX = 0;
triggered = false;
animatedBanner.classList.remove('active');
e.preventDefault();
}
function onDrag(e) {
if (!isDragging) return;
const currentX = getClientX(e);
diffX = currentX - startX;
if ((direction === 'left' && diffX < 0) || (direction === 'right' && diffX > 0)) {
animatedBanner.style.transform = `translateX(${diffX}px)`;
if (Math.abs(diffX) > threshold) {
triggerOnce();
}
e.preventDefault();
}
}
function endDrag() {
if (!isDragging) return;
isDragging = false;
const dragRatio = Math.abs(diffX) / dragTarget.offsetWidth;
if (Math.abs(diffX) < clickTolerance || (
dragRatio >= dragRatioThreshold &&
((direction === 'left' && diffX < 0) || (direction === 'right' && diffX > 0))
)) {
triggerOnce();
} else {
animatedBanner.style.transform = 'translateX(0)';
animatedBanner.classList.add('active');
}
diffX = 0;
}
dragTarget.addEventListener('mousedown', startDrag);
dragTarget.addEventListener('mousemove', onDrag);
dragTarget.addEventListener('mouseup', endDrag);
dragTarget.addEventListener('mouseleave', endDrag);
dragTarget.addEventListener('touchstart', startDrag, { passive: false });
dragTarget.addEventListener('touchmove', onDrag, { passive: false });
dragTarget.addEventListener('touchend', endDrag);
}
// end
bannerConfigs.forEach(config => {
const targets = document.querySelectorAll(config.selector);
if (targets.length === 0) return;
targets.forEach(target => {
target.innerHTML = '';
const banner = createBanner(config);
target.appendChild(banner);
const customBox = banner.querySelector('.customBox');
const animatedBanner = banner.querySelector('.customBanner');
const threshold = config.width * dragSensitivity;
setupDragEvents(customBox, animatedBanner, threshold, coupangLink, config.dragDirection);
});
});
}, 100);