支持嵌入式Google日历中的用户时区

时间:2015-08-05 01:29:15

标签: javascript google-calendar-api

Google日历的嵌入代码会插入" ctz" URL中的变量用于设置相应的显示时区,但我在全球网站上与超过500名用户合作并尝试让每个人都清楚安排(非付费语言学习者,否则我只是聘请专家)。

有没有人建议如何根据用户的IP地址设置用户的时区?我整天都已经非常广泛地扫描了这些问题。

4 个答案:

答案 0 :(得分:2)

使用JSTZ库,例如通过cdnjs包含一个类似的脚本标签

<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/jstimezonedetect/1.0.4/jstz.min.js"></script>

然后在结束标记之前放置一个脚本标记:

  1. 标记嵌入式日历iframe的容器,其ID为 'calendar-container'
  2. 将iframe嵌入代码分成两段 在网址的时区参数附近
  3. 从JSTZ
  4. 获取时区名称
  5. 将容器的innerHTML设置为重建的iframe标记。
  6. 因此,如果您的日历嵌入iframe标记如下:

    <iframe src="https://www.google.com/calendar/embed?showPrint=0&amp;showCalendars=0&amp;mode=WEEK&amp;height=600&amp;wkst=1&amp;bgcolor=%23FFFFFF&amp;src=somecalendaridentifier%40group.calendar.google.com&amp;color=%23AB8B00&amp;ctz=America%2FLos_Angeles" style=" border-width:0 " width="800" height="600" frameborder="0" scrolling="no"></iframe>
    

    您的脚本如下所示:

    <script type="text/javascript">
      var timezone = jstz.determine();
      var pref = '<iframe src="https://www.google.com/calendar/embed?showPrint=0&amp;showCalendars=0&amp;mode=WEEK&amp;height=600&amp;wkst=1&amp;bgcolor=%23FFFFFF&amp;src=somecalendaridentifier%40group.calendar.google.com&amp;color=%23AB8B00&amp;ctz=';
      var suff = '" style=" border-width:0 " width="800" height="600" frameborder="0" scrolling="no"></iframe>';
      var iframe_html = pref + timezone.name() + suff;
      document.getElementById('calendar-container').innerHTML = iframe_html;
    </script>
    

答案 1 :(得分:1)

您的解决方案效果很好。我的最终代码是这样的

HTML(来自Marek Rzewuski's answer):

<div id="calendar-container"></div>

JavaScript(从sheive's answer修改):

<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/jstimezonedetect/1.0.4/jstz.min.js"></script>
<script type="text/javascript">
 var timezone = encodeURIComponent(jstz.determine().name()); 
 var pref = '<iframe src="https://calendar.google.com/calendar/embed?mode=agenda&src=somecalendaridentifier%40group.calendar.google.com&ctz=';
 var suff = '" style=" border-width:0 " width="800" height="600" frameborder="0" scrolling="no"></iframe>';
 var iframe_html = pref + timezone + suff;
 document.getElementById('calendar-container').innerHTML = iframe_html;
</script>

我只是将所有相关答案汇总在此页面上。

答案 2 :(得分:0)

有人建议使用名为JSTZ的JavaScript库,并将其动态添加到Google日历的嵌入代码中。幸运的是,Google日历似乎使用与浏览器相同的标准化IANA时区代码(yay good data!),从而避免了大量的SWITCH语句。

  

var timezone = jstz.determine();   timezone.name();   “美国/纽约”

但我仍然无法弄清楚如何完成这项工作。有人可以帮助我们超越最后一英里吗?

答案 3 :(得分:0)

工作正常。必须添加:

<div id="calendar-container"></div>

in html