체인의정석

node.js) UTC 시간 기준으로 날짜를 저장하는 방법, blocktimestamp로 부터 UTC시간 도출하는 방법 본문

개발/backend

node.js) UTC 시간 기준으로 날짜를 저장하는 방법, blocktimestamp로 부터 UTC시간 도출하는 방법

체인의정석 2024. 11. 21. 12:13
728x90
반응형

만약 mysql 데이터베이스에 시간을 UTC기준으로 시간을 넣거나, 블록체인의 blocktimestamp를 통해서 UTC시간을 뽑아내고 db에 넣고 싶을때는 아래 코드를 사용하면 된다.

function getCurrentUTCDate() {
  const date = new Date();
  return formatUTCDateToCustom(date);
}

function getNextUTCDate() {
  const date = new Date();
  date.setUTCDate(date.getUTCDate() + 1);
  return formatUTCDateToCustom(date);
}

function formatUTCDateToCustom(date) {
  const pad = (num) => String(num).padStart(2, '0');

  const year = date.getUTCFullYear();
  const month = pad(date.getUTCMonth() + 1); // getUTCMonth is zero-based
  const day = pad(date.getUTCDate());

  const hours = pad(date.getUTCHours());
  const minutes = pad(date.getUTCMinutes());
  const seconds = pad(date.getUTCSeconds());

  return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
}

function blockTimestampToUTCDate(blockTimestamp) {
  const date = new Date(blockTimestamp * 1000);
  const datetime = formatUTCDateToCustom(date);
  return datetime;
}

function blockTimestampToNextUTCDate(blockTimestamp) {
  const date = new Date(blockTimestamp * 1000);
  date.setUTCDate(date.getUTCDate() + 1);
  const datetime = formatUTCDateToCustom(date);
  return datetime;
}

module.exports = {getCurrentUTCDate, getNextUTCDate, formatUTCDateToCustom, blockTimestampToUTCDate, blockTimestampToNextUTCDate};

여기서 만약 하루 뒤의 시간을 유효기간으로 두고 넣으려면

function getNextUTCDate() {
  const date = new Date();
  date.setUTCDate(date.getUTCDate() + 1);
  return formatUTCDateToCustom(date);
}

한시간 뒤의 시간을 넣으려면

function getNextUTCDate() {
  const date = new Date();
  date.setUTCHours(date.getUTCHours() + 1);
  return formatUTCDateToCustom(date);
}

이런식으로 넣어주면 된다.

블록체인에서의 blockTimestamp의 경우 1000을 곱한 후에 시간으로 바꾸어주면 된다.

이때 UTCDate 포멧으로 바꾸기 위해서 별도의 작업이 필요하기 때문에 위와같이 코드를 사용해야 한다.

만약 blocknumber로 체크를한다? 그럼 정확한 시간을 맞출수는 없지만 블록생성속도를 초단위로 계산해서 넣어주면 대략적으로 일치한다. (초단위 정도의 오차 발생 가능) 따라서 blocktimestamp로 쓸지 number로 쓸지를 정해야 한다.

728x90
반응형
Comments