ActiveSupport의 시간 헬퍼 개요
Rails는 ActiveSupport를 통해 시간 관련 작업을 간소화하는 여러 헬퍼 메서드를 제공합니다. 이들은 주로 ActionView::Helpers::DateHelper 모듈에 포함되어 있습니다.
- 주요 헬퍼:
time_ago_in_words(from_time, include_seconds: false): 주어진 시간으로부터 현재까지의 경과 시간을 “n분 전”, “n시간 전”과 같이 상대적으로 표현합니다.include_seconds옵션을 통해 초 단위 포함 여부를 제어할 수 있습니다.distance_of_time_in_words(from_time, to_time, include_seconds: false, scope: 'datetime.distance_in_words'): 두 시간 사이의 간격을 상대적으로 표현합니다. 예를 들어, “약 1시간”, “2일” 등으로 표시됩니다.
time_ago_in_words 활용
가장 흔히 사용되는 헬퍼 중 하나로, 게시글 작성 시간, 댓글 등록 시간 등 특정 시점으로부터 경과한 시간을 표시할 때 유용합니다.
-
예시:
time_ago_in_words(post.created_at) -
include_seconds: true옵션을 사용하면 1분 미만의 시간도 “30초 전”과 같이 상세하게 표현할 수 있습니다.
distance_of_time_in_words 활용
시작 시간과 종료 시간 사이의 간격을 표현할 때 사용됩니다. 이벤트 기간, 프로젝트 소요 시간 등을 나타내는 데 적합합니다.
-
예시:
distance_of_time_in_words(event.start_time, event.end_time) -
기본적으로
to_time은 현재 시간으로 설정되지만, 명시적으로 다른 시간을 지정할 수 있습니다.
커스터마이징 및 로케일 지원
ActiveSupport의 시간 헬퍼는 국제화를 지원하며, I18n을 통해 다양한 언어로 출력될 수 있습니다. config/locales 디렉토리에 YAML 파일을 추가하여 번역 문자열을 정의할 수 있습니다.
-
예시 (ko.yml):
yaml ko: datetime: distance_in_words: less_than_x_seconds: one: "1초 미만" other: "%{count}초 미만" # ... 기타 시간 단위 번역 -
scope옵션을 사용하여 특정 컨텍스트에 맞는 번역을 적용할 수도 있습니다.
주의사항
-
시간 표현은 상대적이기 때문에, 매우 오래된 시간의 경우 “수년 전”과 같이 모호하게 표시될 수 있습니다. 중요한 날짜는 절대적인 형식과 함께 제공하는 것을 고려해야 합니다.
-
클라이언트 측에서 동적으로 시간을 업데이트해야 하는 경우, JavaScript 라이브러리(예: Moment.js, date-fns)를 함께 사용하는 것이 효과적입니다.