我正在写一个Google Calendar sidebar gadget来跟踪每个事件标记的总小时数(根据事件的详细信息确定,即“标记:工作”)。
用户可以更改他们在日历中查看的当前周,月,日,我希望能够计算与当前视图相关的小时数。
我在gadget API(或任何其他Google Calendar API)中看不到允许小工具访问当前显示的视图的任何内容。我注意到URL有一个类似于
的锚标记 g|week-2+23127+23137+23131
对应于2015年2月23日星期一 - 2015年3月1日星期日以周模式观看。
我也注意到以下关系:
23127
是视图中的第一天23137
是视图中的最后一天23131
是月视图(日历左侧)中选择的日期如果有办法使用API获取当前显示的视图,那将是理想的但我会解决锚定标记。不幸的是,我无法破译这些数字是如何运作的。
答案 0 :(得分:1)
可以使用以下call:
访问当前显示的日期范围
google.calendar.subscribeToDates(function(d) { // do something });
其中d是Google date range d.startTime
,d.endTime
是开头和结尾。
网址中的数字与纪元日期和时间不直接对应。相反,每年有512天与之相关,每个月有32天。例如,二月有28天定期,但每闰年它有29天。日历从来没有必要调整,因为它只是每个月分配32天,每次出来一个很好的偶数。
仔细检查显示的日期范围还会显示,如果从1月1日减去12月31日的数字,则会得到130.开始和结束的会计(不计入12月31日和1月1日)给你128.
12 * 32 + 128 = 512
- 一年12个月,每月32天,每年128个差距
此外,由于某种原因,1970年1月1日的相关数量为33,因此在确定日期时将其添加到您的计算中。
答案 1 :(得分:1)
这不适合评论,但这是编码的工作原理:
编码方案可以从数字中轻松找到日/月/年。
23131 ,产生 2015年2月27日(来自问题中的示例)。
除以512并为年添加1970(纪元)。
23131/512 = 45.xxx => 45 + 1970 = 2015 。
获取该部门的剩余部分并除以32以找到月。
23131 mod 512 = 91/32 = 2.xxx = 二月
获得该部门的其余部分,这是日。
91 mod 32 = 27