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 月 3 日星期六 16:00:00 GMT,而我将其设置为 2012 年 11 月 4 日 0.00.00。

这是我的代码

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 回答