4

イベントのあるレールアプリがあります。start_date私のイベント テーブルには、datetime 型のというフィールドがあります。現在、chronic を使用して start_date フィールドを解析してイベントを保存すると、日付が正しく保存されません (または、少なくとも正しく返されません)。

例: イベントを保存し、start_date のテキストフィールドに を入力し9/14/13 at 9amました。データを保存し、ページを更新すると、テキスト フィールドの値は9/14/13 at 11am. mysql テーブルの値は2013-09-14 16:00:00.

ここで何が起こっているのですか?これは私のサーバーでのみ発生し、ローカルで実行しているときは発生しません。

アプリケーション.rb:

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

モデル/event.rb:

class Event < ActiveRecord::Base
    belongs_to :user
    attr_accessible :description, :name, :start_date_string

    validate :name_not_blank
    validate :start_date_not_blank

    # Validate that the name is not blank
    def name_not_blank
        errors.add(:name, "Name can't be blank") unless !name.blank?
    end

    # Validate that the name is not blank
    def start_date_not_blank
        errors.add(:start_date, "Date and Time can't be blank") unless !start_date.blank?
    end

    # getter
    def start_date_string
        @start_date_string || start_date.in_time_zone.try(:strftime, "%m/%d/%Y at %I:%M %P")
    end

    # setter
    def start_date_string=(value)
        @start_date_string = value
        self.start_date = parse_start_date
    end

    # parse the start_date
    def parse_start_date
        Chronic.parse(start_date_string)
    end     
end

ヘルパー/application_helper.rb:

# Formats a date to words (i.e. March 20, 1980 at 10:00 am)
def spell_date_and_time(date) 
    date.strftime("%B %d, %Y at %I:%M %P")
end

edit.html.erb

<span class="timestamp"><%= spell_date_and_time(event.start_date) %></span>
4

4 に答える 4

3

正しいと仮定する'Central Time (US & Canada)'と (つまり、東部時間帯にいない)、次のようになります。

> Time.zone = "UTC" 
> Chronic.time_class = Time.zone 
> Chronic.parse("June 15 2006 at 5:45 AM") 
=> Thu, 15 Jun 2006 05:45:00 UTC +00:00

Chronic.time_class = Time.zoneあなたはそれを入れることができますconfig/initializers/chronic.rb

于 2013-09-02T23:43:23.240 に答える
1

同じ問題があり、application.rb で次の行にコメントして修正しました。

config.active_record.default_timezone = :local

application.rbで読んだ内容に従ってこれを行いました:

# 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.
于 2014-09-18T19:09:38.917 に答える
0

申し訳ありませんが、私はタブレットを使用しているため、これは簡単にする必要があります。このような問題があり、次のようなものを使用して修正しました

Time.now.utc 

ただし、application.rb config.time_zone にあることがわかりますので、これは機能しない可能性があります。

そうでない場合は、ここに良いSOの答えがあります。おそらく役立つでしょう

config.time_zone が何もしないように見えるのはなぜですか?

于 2013-08-30T03:32:52.363 に答える