1

私はカレンダーを持っていて、ユーザーが1日をクリックすると、javascriptの時間変数をajax経由でRailsコントローラーに渡します。

これはローカルでは正常に機能しますが、サーバーにデプロイすると、クリックした日の日付が1日遅れているようです。

カレンダーを最初にページにロードすると、正しい日が表示され、次を使用しています。day = Time.now.to_date.to_s(:db)

ユーザーがカレンダーの1日をクリックすると、次のjsステートメントが使用されます。

start_date: Math.floor(new Date(date).getTime()/1000)

これはこれに変換されます:

1362549600

そして、それをajaxillyでこのrailsコントローラーメソッドに渡します。

start_date = Time.at(params[:start_date].to_i).to_date.to_s(:db)
logger.info "start_date = #{start_date}"
logger.info "time = #{Time.at(params[:start_date].to_i).to_datetime.to_s(:db)}"

ロガーの出力は次のとおりです。

start_date = 2013-03-05
time = 2013-03-05 22:00:00

config/application.rbでタイムゾーンを設定しています。

config.time_zone = 'Central Time (US & Canada)'

これを修正する方法について何か提案はありますか?jsからrailsに日付を渡すために間違った方法を使用していますか?

編集

ちなみに私のjavascriptスニペットでdateは、最初はWed Feb 06 2013 00:00:00 GMT-0600 (CST)

私がちょうどチェックしたもう一つのことは、私が物理的に中部標準時に座っている間、PDTにある私のサーバー時間です。

$ date
Tue Mar 19 16:51:52 PDT 2013

また、アプリをローカルで実行すると、ロガーの出力は次のようになります。

start_date = 2013-03-06
time = 2013-03-06 00:00:00

これが昨日と今日の違いです。これを修正するために何を変更すればよいかわかりません。

4

1 に答える 1

2

Time.atrubyのすべての日付と時刻関数と同様に、サーバーシステム時刻を使用します。

これconfig.time_zoneは、実際には、データベースに日付を保存するときの日付変換(読み取りまたは書き込み)にのみ使用されます。詳細については、この回答を参照してください。

irbサーバー上で実行して試してみるTime.at(1362549600).utc_offset / 60 / 60と、予想されるタイムゾーンオフセット-6時間ではなく、取得しているように見える-2が取得されると思います。

于 2013-03-20T00:06:58.033 に答える