숫자와 날짜

숫자

모든 자바스크립트 숫자는 IEEE 754 부동소수점 표준에 따라 여덟개의 바이트로 표현되는 배정밀도 값을 갖는다.
10진수 42
16진수 0x2A
8진수 0o52
2진수 0b101010

1/0 Infinity 무한대
0/0 NaN 숫자아님

const n = 2342342
n.toString(16) // 16진수로 변경된 문자열
n.toString(8) // 8진수로 변경된 문자열

toFixed, toExponential, toPrecision

//앞뒤공백이 없는 순수한 10진수 문자열 확인
const intRegex = /^[+-]?[0-9]+$/
if (intRegex.test(str)) value = parseInt(str)

Number 함수와 상수

Number 클래스

이름설명
isNaN(x)x가 NaN이면 참이다
isFinite(x)x가 ±Infinity, NaN이 아니면 참이다

수학관련 함수와 상수

Math 클래스

큰정수

큰정수 big integer 는 숫자의 갯수에 제한이 없는 정수.
큰정수는 n 으로 끝남
typeof(n) 'bigint' 반환

날짜생성

컴퓨터에서는 특정시간을 기준으로 삼아 이후 또는 이전 시간을 표시한다. 이를 에폭 epoch 라 부르며 1970년 1월 1일 목요일 자정 UTC 를 가리킨다. UTC는 그리니치 천문대를 지나는 자오선을 기준으로 삼은 시간으로 세계협정시 라고도 불린다.
자바스크립트는 에폭기준 밀리초기준으로 시간을 측정하며 유효시간 범위는 ±100,000,000 일이다.
표준 ISO 8601 포맷 YYYY-MM-DDTHH:mm:ss.sssZ 로 표시하며 T 로 날짜와 시간을 구분하고 Z 는 UTC로 부터 오프셋이 0임을 의미한다.

// 1970-01-01T00:00:00.000Z // epoch
// +275760-09-13T00:00:00.000Z // 가장 큰 날짜
이름설명
new Date(iso86015String)표준 8601 문자열을 이용
new Date()현재시간
new Date(millisecondsFromEpoch)에폭기준 밀리초로 Date생성
new Date(year, zeroBasedMonth, day, hours, minutes, seconds, milliseconds)
UTC(year, zeroBasedMonth, day, hours, minutes, seconds, milliseconds)에폭을 기준으로 밀리초 반환
toISOString()표준 8601 문자열 반환
toLocaleString(locale, options)사람이 읽을수 있는 포맷으로 출력, locale, options 참고

new 없이 Date 함수를 호출하면 인수를 무시하며 Date 객체가 아닌 현재시간을 문자열로 반환한다.

Date 객체를 수식연산에 사용하면 자동으로 문자열이나 에폭기준 밀리초 숫자로 변환된다.

let a = new Date()
a + 1 // 'Thu Mar 24 2022 18:24:55 GMT+0900 (한국 표준시)1'
a * 1 // 1648113895829

Date 함수와 메서드

Date.UTC(year, zeroBasedMonth, day, hours, minutes, seconds, milliseconds)
Date.parse(dateString)
Date.now()
모두 에폭기준 밀리초를 반환한다.

const deadLine = new Date(Date.UTC(2022, 0, 31))

자바스크립트는 시간단위 세터를 제공한다. 세터는 자동으로 유효한 다음날짜로 값을 조정한다.

const appointment = new Date('2022-05-31T00:00:00.000Z')
appointment.setUTCMonth(5 /* 6월 */) // appointment 7월 1일 

날짜 포메팅

const appointment = new Date('2022-05-31T09:12:44.999Z')
// undefined
appointment
// Tue May 31 2022 18:12:44 GMT+0900 (한국 표준시)
appointment.toString()
// 'Tue May 31 2022 18:12:44 GMT+0900 (한국 표준시)'
appointment.toDateString()
// 'Tue May 31 2022'
appointment.toTimeString()
// '18:12:44 GMT+0900 (한국 표준시)'
appointment.toUTCString()
// 'Tue, 31 May 2022 09:12:44 GMT'
appointment.toLocaleString()
// '2022. 5. 31. 오후 6:12:44'
appointment.toLocaleDateString()
// '2022. 5. 31.'
appointment.toLocaleTimeString()
// '오후 6:12:44'
appointment.toLocaleTimeString('en-Us')
// '6:12:44 PM'
appointment.toLocaleDateString('en-US', { year: 'numeric', month: 'long', day: 'numeric'})
// 'May 31, 2022'
appointment.toISOString()
// '2022-05-31T09:12:44.999Z'
appointment.toISOString().slice(0, 10);
// '2022-05-31'

연습문제

function plusMinusZero(x) {
  // +0 -> +1, -0 -> -1, 이외 -> 0
  if (Object.is(Infinity, 1/x))
    return +1
  if (Object.is(-Infinity, 1/x))
    return -1
  return 0
}

function thousandBigint(x) {
  let xx = x.toString()
  return BigInt(xx.repeat(1000))
}

function printCalendar(y, m) {
  let ym = new Date(y, m)
  let day = ym.getDay()
  let lastdate = new Date(y, m+1, 0)
  let ld = lastdate.getDate()
  let sp = '   '.repeat(day)
  for (let i = 1; i <= ld; i++) {
      sp = sp + (i<10? ' '+i : i) + ' '
      if ((i + day) % 7 === 0) {
      	sp = sp + '\n'
      }
  }
  return sp
}

const deadline = new Date(Date.UTC(2020, 0, 31))
deadline.setUTCMonth(1)
deadline.setUTCDate(1)
deadline // Sun Mar 01 2020 09:00:00 GMT+0900 (한국 표준시)

좋은 웹페이지 즐겨찾기