본문 바로가기
자바스크립트/바닐라 JS

날짜, 시간 관련 자바스크립트 함수들

by zenna 2023. 1. 14.
728x90
프로젝트 하면서 만들어 사용했던 
날짜와 시간 관련 자바스크립트 함수들을 공유합니다. 
사용법을 함께 적어두니 외부 모듈처럼 사용하세요 ^_^
// 날짜관련 모듈
const days = ['일요일','월요일','화요일','수요일','목요일','금요일','토요일'];
const daysE = ['sun','mon','tue','wed','thu','fri','sat'];
export const Alldays =  [['월요일','mon'],['화요일','tue'],['수요일','wed'],['목요일','thu'],['금요일','fri'],
['토요일','sat'],['일요일','sun'],['공휴일','pbhl']];

//작성일자 등이 최신(7일 이내)인지 확인
//strToDate('2022-05-01')
export function strToDate(str=""){
    let dated = new Date(str);
    let today = new Date();
    
    if((today.getTime()-dated.getTime())/(1000*60*60*24)<=7){
        return true;
    }else{
        return false;
    }
}
//공휴일 여부 반환
//공휴일은 아래 holiday  object에 미리 기재해줘야 합니다. 
// 이 방식이 API 로 받아오는 것 보다 빠르고 간결해요
// isHoliday('2023-03-01') -> true
export function isHoliday(str="0000-00-00"){
    const holiday = {
        2022:{11:[],12:[25]},
        2023:{
            1:[1, 21, 22, 23, 24],
            2:[],
            3:[1],
            4:[],
            5:[5, 27],
            6:[6],
            7:[],
            8:[15],
            9:[28, 29, 30],
            10:[3, 9],
            11:[],
            12:[25],
        },
    }
    let dated = new Date(str);
    let year = dated.getFullYear();
    let month = dated.getMonth()+1;
    let date= dated.getDate();
   // @ts-ignore
   return (holiday[year][month]).includes(date);
}

//공휴일이면 "pbhl"로, 아니라면 'mon'형태로 반환
export function whatDayE(str="0000-00-00"){
    if(isHoliday(str)){
        return "pbhl";
    }else{
        let dated = new Date(str);
        return daysE[dated.getDay()]
    }
}

//공휴일이면 "공휴일"로, 아니라면 '0요일'형태로 반환
export function whatDayK(str){
    if(typeof str === "object"){
        str = dayto8(str);
    }
    if(isHoliday(str)){
        return "공휴일";
    }else{
        let dated = new Date(str);
        return days[dated.getDay()]
    }
}

//오늘 날짜를 string (0000-00-00) 형태로 반환
export function today8(){
    let today = new Date();
    return `${today.getFullYear()}-${today.getMonth()+1}-${today.getDate()}`
}
//오늘 날짜를 "0000년 00월 00일 00요일" 형태로 반환
export function todayk(){
    let today = new Date();
    return `${today.getFullYear()}년 ${today.getMonth()+1}월 ${today.getDate()}일 ${days[today.getDay()]}`
}

//특정 날짜를 0000-00-00형태로 입력하면 string (0000-00-00) 형태로 반환
export function dayto8(date){
    return `${date.getFullYear()}-${date.getMonth()+1}-${date.getDate()}`
}

//특정 날짜를 0000-00-00형태로 입력하면 string (0000년 00월 00일 0요일) 형태로 반환
export function daytoLong(dateone="0000-00-00"){
    let date = new Date(dateone);
    return `${date.getFullYear()}년 ${date.getMonth()+1}월 ${date.getDate()}일 ${days[date.getDay()]}`
}

// 현재 시간을 hh:mm 형태로 반환
export function whattimenow(){
    let date = new Date();
    let hour = date.getHours()+"";
    let minute = date.getMinutes()+"";
    hour = (hour.length==1)?"0"+hour:hour+"";
    minute = (minute.length==1)?"0"+minute:minute+"";
    return hour+":"+minute;
}

//타임테이블 축약
//영업시간 등을 간결하게 표현하기 위해, 겹치는 영업시간을 가지는 요일을
//묶어서 표현해줌
export function timeTable(obj={},set=2){
    let sett = ["_strt","_end"];
    if(set==3){
      sett = ["_str_tm","_end_tm"];
    }
    /**
     * @type {string[]}
     */
    let holi = [];
    let work = {};
    Alldays.forEach(i=>{
      //휴일인경우
      if(obj[i[1]+sett[0]]==""){
        holi.push(i[0]);
      }else{
        let th = obj[i[1]+sett[0]]+" ~ "+obj[i[1]+sett[1]];
        
        if(Object.keys(work).length==0){
          work[th] = i[0];
        }else{
          let isnew = false;
          let oldkey = "";
          let keys = Object.keys(work)

          keys.forEach(key => {
            if(key==th){
                isnew = false;
                oldkey = key;
              }else{
                isnew=true;
              }
          });          
          if(isnew){
            work[th] = i[0];
          }else{
            work[th] = work[th]+", "+i[0];
            
          }
        }
      }
     
    })
     return {holiday:holi,work:work,keys:Object.keys(work)};
    
  }
  //수정을 하긴 해야하는데
          datetimeToString(date=new Date()){
            let monthst = String(date.getMonth()+1).padStart(2, "0");
            let dayst = String(date.getDate()).padStart(2, "0");
            let hour = String(date.getHours()).padStart(2, "0");
            let minute = String(date.getMinutes()).padStart(2, "0");
            let sec = String(date.getSeconds()).padStart(2, "0");
            // return `${date.getFullYear()}년 ${date.getMonth()+1}월 ${date.getDate()}일 `
            return date.getFullYear()+monthst+dayst+hour+minute+sec;
        },
        dtToStringFormat(date=new Date(),daysep="-",hoursep=":"){
            let monthst = String(date.getMonth()+1).padStart(2, "0");
            let dayst = String(date.getDate()).padStart(2, "0");
            let hour = String(date.getHours()).padStart(2, "0");
            let minute = String(date.getMinutes()).padStart(2, "0");
            let sec = String(date.getSeconds()).padStart(2, "0");
            // return `${date.getFullYear()}년 ${date.getMonth()+1}월 ${date.getDate()}일 `
            return date.getFullYear()+daysep+monthst+daysep+dayst+" "+hour+hoursep+minute+hoursep+sec;
        },
728x90

댓글