0

私はこの問題に直面しており、完全なカレンダーには、イベントデータより8時間後の時間にイベントが表示されます。それは私のタイムゾーンによるものだと思いました。

これは私のトレースメッセージです

Started GET "/events?custom_param1=something&custom_param2=somethingelse&  start=1351958400&end=1352563200&   authenticity_token=XEXpcBRnQuEivJ2NWjR2+OZ+Uscypalxx+hqGTIiwZA=&_=1352086291522" for 127.0.0.1 at 2012-11-05 11:31:31 +0800
Processing by EventsController#index as JSON
  Parameters: {"custom_param1"=>"something", "custom_param2"=>"somethingelse", "start"=>"1351958400", "end"=>"1352563200", "authenticity_token"=>"XEXpcBRnQuEivJ2NWjR2 OZ Uscypalxx hqGTIiwZA=", "_"=>"1352086291522"}
  Event Load (0.5ms)  SELECT `events`.* FROM `events` WHERE (starts_at > '2012-11-04T00:00:00+08:00') AND (ends_at < '2012-11-11T00:00:00+08:00')
Completed 200 OK in 10ms (Views: 8.2ms | ActiveRecord: 0.5ms)

ここでの問題は、Unixの開始時刻であり、2012年11月4日0.00.00に設定した2012年11月3日16:00:00GMTです。

これが私のコードです

class Event < ActiveRecord::Base
  scope :before, lambda {|end_time| {:conditions => ["ends_at < ?",   Event.format_date(end_time)] }}
  scope :after, lambda {|start_time| {:conditions => ["starts_at > ?", Event.format_date(start_time)] }}
  def as_json(options = {})
    {
      :id => self.id,
      :title => self.title,
      :description => self.description || "",
      :start => starts_at.rfc822,
      :end => ends_at.rfc822,
      :allDay => false,
      :recurring => false,
      :url => Rails.application.routes.url_helpers.event_path(id),
      #:color => "red"
    }

  end

  def self.format_date(date_time)
    Time.at(date_time.to_i).to_time.iso8601
  end
end

ignoreTimeZoneをtrueに変更しても、私にとってはうまくいきませんでした。ですから、誰かが私を助けてくれたら幸いです。

たぶん、構文解析時間の線に沿った何か?

4

1 に答える 1

1

UNIX 時間の値を渡す場合は、エポック (1970-01-01T00:00:00Z) からの秒またはミリ秒の UTC になります。クライアントのローカル タイムゾーンで同じ時刻に設定されたローカル JavaScript 日付オブジェクトを取得するには、UTC 時刻の値をDate コンストラクタに直接渡します。

例えば

// if timeValue is milliseconds
var localDate = new Date(timeValue);

// if timeValue is in seconds
var localDate = new Date(timeValue * 1000);  

例えば

// For timeValue in milliseconds
new Date(1352090840000); // 2012-11-05T04:47:20Z

エポックからの UTC ミリ秒単位で現地時間を送り返すには、逆の操作を行います。

var utcTimeValue = localDate.getTime();

によって返される時間getTimeは、エポックからの UTC ミリ秒です。

于 2012-11-05T04:51:19.463 に答える