2014-06-18 10 views
0

저는 Rails 3.2 웹 앱을 만들고 있는데, 객체에 날짜 (문자열)를 입력하면 저장할 날짜가 하루 전에 저장됩니다.저장하기 전에 시간대를 설정하는 방법

그래서 2014-06-18을 제공하면 저장 날짜는 2014-06-17입니다. 이것은 매우 성가신 일입니다. updated_at은 올바르게 저장됩니다.

이 내 코드입니다 :

report = Timereport.new 
report.status = "stop" 
report.hours = 0 
report.created_at = params[:created_at] 
report.save 

어떻게이 문제를 해결할 수 있습니까?

업데이트

params[:created_at] 
=> 2014-06-18 

Time.zone 
=> #<ActiveSupport::TimeZone:0x007fd94fbcb170 @name="UTC", @utc_offset=nil, @tzinfo=#<TZInfo::TimezoneProxy: Etc/UTC>, @current_period=nil> 

'2014-06-18'.to_datetime 
=> Wed, 18 Jun 2014 00:00:00 +0000 
+0

현지 시간대는 무엇입니까? – Pavan

+1

'time_zone'이'동부 표준시 (미국과 캐나다)'라고 가정하면'application.rb'에'config.time_zone = '동부 표준시 (미국과 캐나다)'를 설정하여 현지 시간으로 날짜를 읽을 수 있습니다 존. – Pavan

답변

1

나는이 변화하지 않는 것이 좋습니다 것입니다. Rails는 모든 날짜를 데이터베이스에 UTC로 저장하므로 나중에 현지화 될 수 있습니다.

대신 ActiveRecord에서 데이터베이스에서 데이터를 읽을 때 날짜를 시간대로 변환하고 싶습니다.

config/application.rbconfig.time_zone 설정으로 전역 적으로 지정할 수 있습니다.

# Set Time.zone default to the specified zone and make Active Record auto-convert to this zone. 
# Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC. 
# config.time_zone = 'Central Time (US & Canada)' 

사용자의 시간대에 따라이 작업을 수행 할 수도 있지만 전체적으로 처리하려는 것처럼 들릴 수 있습니다.

0

당신에게 콘솔에서

'2014-06-18'.to_datetime 

을 보여줍니다 무엇

params[:created_at] 

에 무엇입니까?

있는지,이 뜻이 당신을 도와줍니다

Time.zone 

것입니다/우리를 더 볼 수 있습니다.

+1

이 새로운 데이터로 답변을 업데이트했습니다. –

+0

이 새로운 정보를 바탕으로 내가 할 수있는 아이디어가 있습니까? –

+0

좋습니다. 레일스 앱 Time.zone과 컴퓨터의 Time.zone의 차이에 따라 다릅니다. 이봐, Time.zone에 컴퓨터가있다. Chris에서 컴퓨터의 Time.zone에 언급 된 것처럼 rails-app의 Time.zone을 설정하면 제대로 작동합니다. 또는 빠른 테스트를 위해 컴퓨터의 Time.zone을 Etc/UTC로 설정할 수 있으며 작동해야합니다. – nabinabou

관련 문제