Rails에서 날짜 객체 생성
Rails는 Ruby의 내장 Date 클래스를 ActiveSupport 확장으로 강화합니다.
-
Date.new(year, month, day): 특정 날짜를 생성합니다. 예:Date.new(2025, 3, 15) -
Date.today: 현재 날짜를 반환합니다(서버 시간대 기준). -
Date.parse("YYYY-MM-DD")또는Date.parse("DD Mon YYYY"): 문자열을 날짜 객체로 파싱합니다. -
"YYYY-MM-DD".to_date: Rails가 확장한 문자열 메서드로, 사용자 입력 처리에 유용합니다.
Rails 모델에서 날짜 및 시간 작업
rails g model Event title:string start_date:date start_time:datetime과 같이 모델을 생성하면, Rails는 date 및 datetime 필드를 각각 Date 및 ActiveSupport::TimeWithZone 객체로 자동 매핑합니다.
Rails 시간대 이해
-
config/application.rb에서config.time_zone을 설정하여 애플리케이션 전반의 시간대를 지정합니다. -
Time.zone.now를 사용하여 설정된 시간대에 맞춰 조정된 시간 객체를 얻습니다.Time.now대신Time.zone.now를 사용하는 것이 중요합니다.
유용한 날짜 메서드
Rails는 날짜 처리를 위한 다양한 헬퍼 메서드를 제공합니다.
-
Date.today.beginning_of_day,Date.today.end_of_day: 특정 날짜의 시작/끝 시간을 가져옵니다. -
Date.today.beginning_of_month,Date.today.end_of_month: 월의 시작/끝 날짜를 가져옵니다. -
Date.today.next_day,Date.today.prev_day: 다음 날/이전 날을 가져옵니다. -
Date.today + N,Date.today - N: 날짜를 더하거나 뺄 수 있습니다. -
start_date..end_date: 날짜 범위를 생성하여 쿼리에 활용할 수 있습니다. 예:Order.where(created_at: Date.today.beginning_of_month..Date.today.end_of_month)
날짜 객체 포맷팅
-
strftime("%d-%m-%Y"): Ruby의 표준 포맷터입니다. -
to_s(:long),to_s(:short): Rails 내장 포맷을 사용합니다. -
config/initializers/time_formats.rb에서 사용자 정의 포맷을 추가할 수 있습니다.
Rails 폼에서 날짜 작업
form.date_select는 드롭다운을, form.date_field는 HTML5 날짜 선택기를 생성하며, Rails는 제출된 값을 Date 객체로 파싱합니다.
날짜 비교 및 타입 변환
-
Date.today > Date.new(2025, 1, 1): 날짜를 직접 비교할 수 있습니다. -
date.to_datetime,date.to_time,time.to_date:Date,Time,DateTime객체 간 변환이 가능합니다.
모범 사례
-
항상
Time.zone.now를 사용하여 애플리케이션의 시간대를 존중합니다. -
날짜 전용 값에는 데이터베이스의
date컬럼을 사용합니다. -
날짜 문자열 저장 대신
Date,Time,DateTime객체로 변환합니다. -
ActiveSupport헬퍼를 적극 활용하고, 효율적인 범위 쿼리를 사용합니다.