如何确定 Google 日历侧边栏小工具中的当前周
How to determine the current week in a Google Calendar sidebar gadget
我正在写一个 Google Calendar sidebar gadget 来跟踪每个事件标签的总小时数(根据事件的详细信息确定,即 "tags: work")。
用户可以更改他们在日历中查看的当前周、月、日,我希望能够计算与他们当前视图相关的小时数。
我在 gadget API(或任何其他 Google 日历 API)中没有看到允许小工具访问当前显示视图的任何地方。我注意到 URL 有一个看起来像
的锚标记
g|week-2+23127+23137+23131
对应于 2015 年 2 月 23 日星期一至 2015 年 3 月 1 日星期日以周模式查看。
我还注意到以下关系:
23127
是视图中的第一天
23137
是视图中的最后一天
23131
是在月视图(日历左侧)中选择的日期
如果有一种方法可以使用 API 获取当前显示的视图,那将是理想的,但我会满足于解析锚标记。不幸的是,我无法破译这些数字是如何工作的。
Google API
可以使用以下call访问当前显示的日期范围:
google.calendar.subscribeToDates(function(d) {
// do something
});
其中 d 是 Google date range d.startTime
并且 d.endTime
是开始和结束。
数字
URL中的数字不直接对应纪元日期和时间。相反,每年有 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,因此在确定日期时将其添加到您的计算中。
这不适合放在评论中,但编码的工作原理如下:
编码方案可以很容易地从数字中找到 day/month/year。
取 23131 得到 2015 年 2 月 27 日(来自您问题中的示例)。
除以 512 并为 年 添加 1970(纪元)。
23131 / 512 = 45.xxx => 45 + 1970 = 2015.
取该除法的余数除以 32 得到 月。
23131 mod 512 = 91 / 32 = 2.xxx = February
获得该部分的剩余部分,这是 天。
91 mod 32 = 27
我正在写一个 Google Calendar sidebar gadget 来跟踪每个事件标签的总小时数(根据事件的详细信息确定,即 "tags: work")。
用户可以更改他们在日历中查看的当前周、月、日,我希望能够计算与他们当前视图相关的小时数。
我在 gadget API(或任何其他 Google 日历 API)中没有看到允许小工具访问当前显示视图的任何地方。我注意到 URL 有一个看起来像
的锚标记g|week-2+23127+23137+23131
对应于 2015 年 2 月 23 日星期一至 2015 年 3 月 1 日星期日以周模式查看。
我还注意到以下关系:
23127
是视图中的第一天23137
是视图中的最后一天23131
是在月视图(日历左侧)中选择的日期
如果有一种方法可以使用 API 获取当前显示的视图,那将是理想的,但我会满足于解析锚标记。不幸的是,我无法破译这些数字是如何工作的。
Google API
可以使用以下call访问当前显示的日期范围:
google.calendar.subscribeToDates(function(d) { // do something });
其中 d 是 Google date range d.startTime
并且 d.endTime
是开始和结束。
数字
URL中的数字不直接对应纪元日期和时间。相反,每年有 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,因此在确定日期时将其添加到您的计算中。
这不适合放在评论中,但编码的工作原理如下:
编码方案可以很容易地从数字中找到 day/month/year。
取 23131 得到 2015 年 2 月 27 日(来自您问题中的示例)。
除以 512 并为 年 添加 1970(纪元)。
23131 / 512 = 45.xxx => 45 + 1970 = 2015.
取该除法的余数除以 32 得到 月。
23131 mod 512 = 91 / 32 = 2.xxx = February
获得该部分的剩余部分,这是 天。
91 mod 32 = 27