【问题标题】:Arshaw Timezone issueArshaw时区问题
【发布时间】:2014-01-13 06:57:06
【问题描述】:

我正在使用 Arshaw fullcalendar 插件版本 1.5.3,

问题是我在上午 9 点使用本地机器时区 EST(东部时间)创建了一个事件,当我将本地机器时区更改为 IST 时,该事件出现在日历中的不同时间晚上 7:30。

它在 EASTERN 时区工作得非常好,如果更改,那么记录会出现在错误的时间。

请帮助我尝试将 ignoreTimezone 初始化为 false 并更新了版本,但似乎没有任何帮助。

// initialize the fullcalendar and set ignore timezone to false 
$(document).ready(function() {
    $('#calendar').fullCalendar({
        events: {
            url: 'http://www.google.com/your_feed_url/',
            className: 'gcal-event',           // an option!
            currentTimezone: 'America/Chicago' // an option!
        },
        ignoreTimezone: false 
     });
});  

/* Passing the event to fullcalendar to display the slots in calendar properly 
   It accepts the start and end time in timestamp */

event.id = appId;
event.start = startTime;    // 1389358800 timestamp
event.end = endTime;        // 1389359700 timestamp
event.editable = presentEvent;
event.allDay = false;
event.patient_name = patient_name;

events.push(event);

_ac.fullCalendar('addEventSource',events); 

它适用于东部时区,并且广告位在上午 8:00(开始时间)-上午 8:15(结束时间)正确显示

当我将本地时区更改为 IST 时,该时段出现在下午 6:30(开始时间)到下午 6.45(结束时间)

【问题讨论】:

  • 准确地向我们展示您所使用的配置选项的代码。
  • $(document).ready(function() { $('#calendar').fullCalendar({ events: { url: 'google.com/your_feed_url', className: 'gcal-event', / / 一个选项!currentTimezone: 'America/Chicago' // 一个选项!}, ignoreTimezone: false }); });
  • 编辑您的问题。在 cmets 中代码非常难以阅读。无论如何,你需要展示更多。显示足够的代码来重现问题。请参阅how to ask a question
  • 马特约翰逊,我已经发布了代码,请帮我解决这个问题

标签: timezone fullcalendar


【解决方案1】:

来自documentation

有时,为什么 FullCalendar 显示的事件时间与 Google 日历界面不同,这可能会让人感到困惑。这涉及到两个因素:

  • 日历的时区,点击日历名称旁边的箭头后通过“日历设置”访问

  • 您的 Google 帐户的时区,可通过 Google 日历屏幕右上角的“设置”链接(靠近“退出”链接)访问

当两个时区相同时,您应该没有问题。当它们不同时,FullCalendar 将在 日历的 时区显示时间。因此,时间将与您在 Google 日历界面中看到的不同,因为它们正在调整为日历的 GMT。解决方案是使用currentTimezone 选项。如果将其设置为与您的 Google 帐户相同的时区,则所有日期都应该一致。

由于您已向 Google 日历询问 America/Chicago 时区,因此您返回的值以美国中部时间(不是东部时间)开始,然后转换为 GMT 作为数字时间戳。

如果您的日历实际上是 IST(印度标准时间),那么您应该将时区请求为 Asia/Kolkata

由于您使用的是数字 Unix 时间戳而不是解析 ISO 日期字符串,因此您不需要 ignoreTimezone 选项 (see the documentation)。无论哪种方式,它都不会影响结果,因此您可以将其删除。

【讨论】:

  • ignoreTimezone 和 currentTimezone 的初始化代码根本不起作用..即使我删除了代码也没有任何区别..我使用的数据、开始时间和结束时间来自数据库这是正确的。问题在于机器的时区,它适用于东部时区,如果更改为任何其他时区,日历上的插槽将更改为其他时间。数据保持不变,但输出会根据时区完全改变
  • 我想要的是无论用户在他/她的机器上使用什么时区.. 输入数据库的记录应该在日历中正确显示.. 考虑一个例子:用户预约早上 8 点到早上 8.15 点,机器的时区为东部时间,然后坐在印度的用户正在查看相同的约会,它在下午 6.30 点 -6.45 点显示......这是错误的,这是由于时区差异而发生的......印度用户正在使用印度标准时间,而美国人正在使用东部时区 两者都在查看相同的约会,并且数据库中的数据保持不变
  • 我是否将数据传递给 _ac.fullCalendar('addEventSource',events);以错误的方式?或者还有其他选择..因为在这两种情况下数据都保持不变,只是机器的时区发生了变化,因此预约空档的时间不同..请帮帮我..这造成了一个大问题对我来说
  • 马特..你能帮帮我吗?
  • 查看docs for the Event object。如果您传递的是 unix 时间戳(如 1389358800),当然会调整为本地时间。这就是 JavaScript Date 的工作原理。尝试改用 ISO8601 字符串,例如“2014-01-10T8:00:00”。然后当ignoreTimezone 为真时,无论用户的时区如何,它都应该显示 8:00。
猜你喜欢
  • 1970-01-01
  • 2013-01-15
  • 1970-01-01
  • 2013-09-16
  • 2016-09-12
  • 2020-07-11
  • 2012-02-27
  • 2011-06-15
  • 2021-01-26
相关资源
最近更新 更多