<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=2"> <meta name="theme-color" content="#222"> <meta name="generator" content="Hexo 6.1.0"> <link rel="apple-touch-icon" sizes="180x180" href="/images/apple-touch-icon-next.png"> <link rel="icon" type="image/png" sizes="32x32" href="/images/favicon-32x32-next.ico"> <link rel="icon" type="image/png" sizes="16x16" href="/images/favicon-16x16-next.ico"> <link rel="mask-icon" href="/images/logo.svg" color="#222"> <link rel="stylesheet" href="/css/main.css"> <link rel="stylesheet" href="/lib/font-awesome/css/all.min.css"> <script id="hexo-configurations"> var NexT = window.NexT || {}; var CONFIG = {"hostname":"zzzykj.cn","root":"/","scheme":"Mist","version":"7.8.0","exturl":false,"sidebar":{"position":"right","display":"post","padding":18,"offset":12,"onmobile":false},"copycode":{"enable":false,"show_result":false,"style":null},"back2top":{"enable":true,"sidebar":false,"scrollpercent":false},"bookmark":{"enable":false,"color":"#222","save":"auto"},"fancybox":false,"mediumzoom":false,"lazyload":false,"pangu":false,"comments":{"style":"tabs","active":null,"storage":true,"lazyload":false,"nav":null},"algolia":{"hits":{"per_page":10},"labels":{"input_placeholder":"Search for Posts","hits_empty":"We didn't find any results for the search: ${query}","hits_stats":"${hits} results found in ${time} ms"}},"localsearch":{"enable":false,"trigger":"auto","top_n_per_article":1,"unescape":false,"preload":false},"motion":{"enable":true,"async":false,"transition":{"post_block":"fadeIn","post_header":"slideDownIn","post_body":"slideDownIn","coll_header":"slideLeftIn","sidebar":"slideUpIn"}}}; </script> <meta property="og:type" content="website"> <meta property="og:title" content="schedule"> <meta property="og:url" content="https://zzzykj.cn/schedule/index.html"> <meta property="og:site_name" content="啊卓的小站"> <meta property="og:locale" content="zh_CN"> <meta property="article:published_time" content="2022-03-14T14:27:14.000Z"> <meta property="article:modified_time" content="2022-03-14T14:27:27.704Z"> <meta property="article:author" content="啊卓"> <meta property="article:tag" content="啊卓,小卓,小站,博客,啊卓的博客"> <meta name="twitter:card" content="summary"> <link rel="canonical" href="https://zzzykj.cn/schedule/"> <script id="page-configurations"> // https://hexo.io/docs/variables.html CONFIG.page = { sidebar: "", isHome : false, isPost : false, lang : 'zh-CN' }; </script> <title>schedule | 啊卓的小站 </title> <noscript> <style> .use-motion .brand, .use-motion .menu-item, .sidebar-inner, .use-motion .post-block, .use-motion .pagination, .use-motion .comments, .use-motion .post-header, .use-motion .post-body, .use-motion .collection-header { opacity: initial; } .use-motion .site-title, .use-motion .site-subtitle { opacity: initial; top: initial; } .use-motion .logo-line-before i { left: initial; } .use-motion .logo-line-after i { right: initial; } </style> </noscript> <link rel="alternate" href="/atom.xml" title="啊卓的小站" type="application/atom+xml"> </head> <body itemscope itemtype="http://schema.org/WebPage"> <div class="container use-motion"> <div class="headband"></div> <header class="header" itemscope itemtype="http://schema.org/WPHeader"> <div class="header-inner"><div class="site-brand-container"> <div class="site-nav-toggle"> <div class="toggle" aria-label="切换导航栏"> <span class="toggle-line toggle-line-first"></span> <span class="toggle-line toggle-line-middle"></span> <span class="toggle-line toggle-line-last"></span> </div> </div> <div class="site-meta"> <a href="/" class="brand" rel="start"> <span class="logo-line-before"><i></i></span> <h1 class="site-title">啊卓的小站</h1> <span class="logo-line-after"><i></i></span> </a> <p class="site-subtitle" itemprop="description">成长的路上, 你我并不孤独</p> </div> <div class="site-nav-right"> <div class="toggle popup-trigger"> </div> </div> </div> <nav class="site-nav"> <ul id="menu" class="main-menu menu"> <li class="menu-item menu-item-home"> <a href="/" rel="section"><i class="fa fa-home fa-fw"></i>首页</a> </li> <li class="menu-item menu-item-about"> <a href="/about/" rel="section"><i class="fa fa-user fa-fw"></i>关于</a> </li> <li class="menu-item menu-item-tags"> <a href="/tags/" rel="section"><i class="fa fa-tags fa-fw"></i>标签<span class="badge">1</span></a> </li> <li class="menu-item menu-item-categories"> <a href="/categories/" rel="section"><i class="fa fa-th fa-fw"></i>分类<span class="badge">0</span></a> </li> <li class="menu-item menu-item-archives"> <a href="/archives/" rel="section"><i class="fa fa-archive fa-fw"></i>归档<span class="badge">2</span></a> </li> <li class="menu-item menu-item-schedule"> <a href="/schedule/" rel="section"><i class="fa fa-calendar fa-fw"></i>日程表</a> </li> <li class="menu-item menu-item-sitemap"> <a href="/sitemap.xml" rel="section"><i class="fa fa-sitemap fa-fw"></i>站点地图</a> </li> <li class="menu-item menu-item-commonweal"> <a href="/404/" rel="section"><i class="fa fa-heartbeat fa-fw"></i>公益 404</a> </li> </ul> </nav> </div> </header> <div class="back-to-top"> <i class="fa fa-arrow-up"></i> <span>0%</span> </div> <main class="main"> <div class="main-inner"> <div class="content-wrap"> <div class="content page posts-expand"> <div class="post-block" lang="zh-CN"> <header class="post-header"> <h1 class="post-title" itemprop="name headline">schedule </h1> <div class="post-meta"> </div> </header> <div class="post-body"> <div class="event-list"> </div> <script> (function() { // Initialization var calendar = { orderBy : 'startTime', showLocation: false, offsetMax : 72, offsetMin : 4, showDeleted : false, singleEvents: true, maxResults : 250 }; // Read config form theme config file Object.assign(calendar, {"calendar_id":"<required>","api_key":"<required>","orderBy":"startTime","offsetMax":24,"offsetMin":4,"showDeleted":false,"singleEvents":true,"maxResults":250}); var now = new Date(); var timeMax = new Date(); var timeMin = new Date(); timeMax.setHours(now.getHours() + calendar.offsetMax); timeMin.setHours(now.getHours() - calendar.offsetMin); // Build URL const params = { key : calendar.api_key, orderBy : calendar.orderBy, timeMax : timeMax.toISOString(), timeMin : timeMin.toISOString(), showDeleted : calendar.showDeleted, singleEvents: calendar.singleEvents, maxResults : calendar.maxResults }; var request_url = 'https://www.googleapis.com/calendar/v3/calendars/' + calendar.calendar_id + '/events?' + Object.entries(params).map(([key, value]) => `${key}=${encodeURIComponent(value)}`).join('&'); fetchData(); var fetchDataTimer = setInterval(fetchData, 60000); window.addEventListener('pjax:send', () => { clearInterval(fetchDataTimer); }); function fetchData() { var eventList = document.querySelector('.event-list'); if (!eventList) return; fetch(request_url).then(response => { return response.json(); }).then(data => { if (data.items.length === 0) { eventList.innerHTML = '<hr>'; return; } // Clean the event list eventList.innerHTML = ''; var prevEnd = 0; // used to decide where to insert an <hr> data.items.forEach(event => { // Parse data var utc = new Date().getTimezoneOffset() * 60000; var start = event.start.dateTime = new Date(event.start.dateTime || (new Date(event.start.date).getTime() + utc)); var end = event.end.dateTime = new Date(event.end.dateTime || (new Date(event.end.date).getTime() + utc)); tense = judgeTense(now, start, end); // 0:now 1:future -1:past if (tense === 1 && prevEnd < now) { eventList.innerHTML += '<hr>'; } eventDOM = buildEventDOM(tense, event); eventList.innerHTML += eventDOM; prevEnd = end; }); }); } function getRelativeTime(current, previous) { var msPerMinute = 60 * 1000; var msPerHour = msPerMinute * 60; var msPerDay = msPerHour * 24; var msPerMonth = msPerDay * 30; var msPerYear = msPerDay * 365; var elapsed = current - previous; var tense = elapsed > 0 ? 'ago' : 'later'; elapsed = Math.abs(elapsed); if ( elapsed < msPerHour ) { return Math.round(elapsed / msPerMinute) + ' minutes ' + tense; } else if ( elapsed < msPerDay ) { return Math.round(elapsed / msPerHour) + ' hours ' + tense; } else if ( elapsed < msPerMonth ) { return 'about ' + Math.round(elapsed / msPerDay) + ' days ' + tense; } else if ( elapsed < msPerYear ) { return 'about ' + Math.round(elapsed / msPerMonth) + ' months ' + tense; } else { return 'about' + Math.round(elapsed / msPerYear) + ' years' + tense; } } function judgeTense(now, eventStart, eventEnd) { if (eventEnd < now) { return -1; } else if (eventStart > now) { return 1; } else { return 0; } } function buildEventDOM(tense, event) { var tenseClass = ''; var start = event.start.dateTime; var end = event.end.dateTime; switch(tense) { case 0 : // now tenseClass = 'event-now'; break; case 1 : // future tenseClass = 'event-future'; break; case -1: // past tenseClass = 'event-past'; break; default: throw 'Time data error'; } var durationFormat = { weekday: 'short', hour : '2-digit', minute : '2-digit' }; var relativeTimeStr = (tense === 0) ? 'NOW' : getRelativeTime(now, start); var durationStr = start.toLocaleTimeString([], durationFormat) + ' - ' + end.toLocaleTimeString([], durationFormat); var locationDOM = ''; if (calendar.showLocation && event.location) { locationDOM = '<span class="event-location event-details">' + event.location + '</span>'; } var eventContent = `<div class="event ${tenseClass}"> <h2 class="event-summary"> ${event.summary} <span class="event-relative-time">${relativeTimeStr}</span> </h2> ${locationDOM} <span class="event-duration event-details">${durationStr}</span> </div>`; return eventContent; } })(); </script> </div> </div> </div> <script> window.addEventListener('tabs:register', () => { let { activeClass } = CONFIG.comments; if (CONFIG.comments.storage) { activeClass = localStorage.getItem('comments_active') || activeClass; } if (activeClass) { let activeTab = document.querySelector(`a[href="#comment-${activeClass}"]`); if (activeTab) { activeTab.click(); } } }); if (CONFIG.comments.storage) { window.addEventListener('tabs:click', event => { if (!event.target.matches('.tabs-comment .tab-content .tab-pane')) return; let commentClass = event.target.classList[1]; localStorage.setItem('comments_active', commentClass); }); } </script> </div> <div class="toggle sidebar-toggle"> <span class="toggle-line toggle-line-first"></span> <span class="toggle-line toggle-line-middle"></span> <span class="toggle-line toggle-line-last"></span> </div> <aside class="sidebar"> <div class="sidebar-inner"> <ul class="sidebar-nav motion-element"> <li class="sidebar-nav-toc"> 文章目录 </li> <li class="sidebar-nav-overview"> 站点概览 </li> </ul> <!--noindex--> <div class="post-toc-wrap sidebar-panel"> </div> <!--/noindex--> <div class="site-overview-wrap sidebar-panel"> <div class="site-author motion-element" itemprop="author" itemscope itemtype="http://schema.org/Person"> <p class="site-author-name" itemprop="name">啊卓</p> <div class="site-description" itemprop="description"></div> </div> <div class="site-state-wrap motion-element"> <nav class="site-state"> <div class="site-state-item site-state-posts"> <a href="/archives/"> <span class="site-state-item-count">2</span> <span class="site-state-item-name">日志</span> </a> </div> <div class="site-state-item site-state-tags"> <a href="/tags/"> <span class="site-state-item-count">1</span> <span class="site-state-item-name">标签</span></a> </div> </nav> </div> <div class="links-of-author motion-element"> <span class="links-of-author-item"> <a href="https://github.com/yourname" title="GitHub → https://github.com/yourname" rel="noopener" target="_blank"><i class="fab fa-github fa-fw"></i>GitHub</a> </span> <span class="links-of-author-item"> <a href="mailto:yourname@gmail.com" title="E-Mail → mailto:yourname@gmail.com" rel="noopener" target="_blank"><i class="fa fa-envelope fa-fw"></i>E-Mail</a> </span> <span class="links-of-author-item"> <a href="https://weibo.com/yourname" title="Weibo → https://weibo.com/yourname" rel="noopener" target="_blank"><i class="fab fa-weibo fa-fw"></i>Weibo</a> </span> </div> </div> </div> </aside> <div id="sidebar-dimmer"></div> </div> </main> <footer class="footer"> <div class="footer-inner"> <div class="beian" style="text-align: center"><a href="https://beian.miit.gov.cn/" rel="noopener" target="_blank">豫ICP备19045614号-2 </a> <img src="http://www.beian.gov.cn/img/new/gongan.png" style="display: inline-block;"> © <span itemprop="copyrightYear">2022</span> <span class="with-love"> <i class="fa fa-heart"></i> </span> <span class="author" itemprop="copyrightHolder">啊卓</span> </div> <div class="copyright" style="display: none"> © <span itemprop="copyrightYear">2022</span> <span class="with-love"> <i class="fa fa-heart"></i> </span> <span class="author" itemprop="copyrightHolder">啊卓</span> <!--  --> <!-- <a target="_blank" rel="noopener" href="http://www.beian.miit.gov.cn/">豫ICP备19045614号-2</a>--> <!-- <span class="post-count">博客全站共92字</span> --> </div> <div style="text-align: center"> <script type="text/javascript">document.write(unescape("%3Cspan id='cnzz_stat_icon_1280972500'%3E%3C/span%3E%3Cscript src='https://s4.cnzz.com/z_stat.php%3Fid%3D1280972500%26online%3D1%26show%3Dline' type='text/javascript'%3E%3C/script%3E"));</script> <div class="theme-info"> <div class="powered-by"></div> <span class="post-count">博客全站共92字</span> </div> </div> <div class="powered-by" style="display: none"> </div> </div> </footer> </div> <script src="/lib/anime.min.js"></script> <script src="/lib/velocity/velocity.min.js"></script> <script src="/lib/velocity/velocity.ui.min.js"></script> <script src="/js/utils.js"></script> <script src="/js/motion.js"></script> <script src="/js/schemes/muse.js"></script> <script src="/js/next-boot.js"></script> </body> </html>