惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

D
Docker
IT之家
IT之家
Microsoft Security Blog
Microsoft Security Blog
博客园 - 司徒正美
云风的 BLOG
云风的 BLOG
P
Proofpoint News Feed
D
DataBreaches.Net
B
Blog RSS Feed
博客园_首页
The GitHub Blog
The GitHub Blog
I
InfoQ
L
LangChain Blog
G
Google Developers Blog
M
MIT News - Artificial intelligence
美团技术团队
腾讯CDC
V
Visual Studio Blog
aimingoo的专栏
aimingoo的专栏
博客园 - 聂微东
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Apple Machine Learning Research
Apple Machine Learning Research
A
About on SuperTechFans
博客园 - 三生石上(FineUI控件)
博客园 - 叶小钗

少数派

派早报:Google 发布 Fitbit Air 等 - 少数派 「新人报到」確認需求,再開始 - 少数派 从 SOLO 独立开发者社区,我看到了越来越多开发者开始做自己的产品 - 少数派 我怎么管理那些"不常做,但总会忘"的生活事项 - 少数派 人形机器人量产元年,数据才是具身智能的“生死线” - 少数派 BuhoLaunchpad 高度还原 Mac 启动台:开发历程与思考 - 少数派 五年陪伴依然不舍,DIY 换壳后让罗技 MX Master 3 继续服役 - 少数派 新玩意 240|少数派的编辑们最近买了啥? - 少数派 一日一技|为什么你应该关闭 iOS 的键盘声音 - 少数派 我做了个插件和 Skills,一键提取任何网站的设计规范 Design.md - 少数派 住在三四线城市的你,该开始录播客了 - 少数派 甘南秘境,大白高国 - 少数派 AI的审美:谁让把我变成川内倫子 - 少数派 返工怎能不烦恼,打工人片单总有一部是你的「嘴替」 - 少数派 为了让「上厕所」更健康,我做了一个小工具 - 少数派 AI + Skill,能够让生成的文章去除 AI 味吗? - 少数派 新玩意|韶音OpenDots ONE 耳夹式耳机 - 少数派 《美满》| 在每一个春天的晚上相爱(362) - 少数派 新玩意|优篮子 PS01 MagSnap 磁吸支架 - 少数派 自我整合手记 | 我开始早睡了:用稳定规则,为自由托底 - 少数派 用龙虾(OpenClaw)两个多月,我最深的12个体会 - 少数派 听歌时间到,12 张你可能错过的 2025 华语乐坛好专辑 - 少数派 承诺能追吗 - 少数派 macOS 26启动台没了? 我做了个不一样的App启动器 - Keboard - 少数派 《四海为家的人》| INTJ对话INTJ(361) - 少数派 你发过的那些黑历史,是时候一次清干净了 - 少数派 新玩意:安安静静玩,越玩越专注:计客密码机 - 少数派 iPad 用户首次体验 Android 平板:vivo Pad6 Pro - 少数派 数据逻辑强 - 少数派 极北行+ | 一路向北,探访日本至北之地 | 001 - 少数派
利用 Workflow 整理请假信息并在 Todoist 自动提醒 - 少数派
2018-12-21 · via 少数派

我不负责公司考勤,但会要求负责的同事收到请假单时把信息告诉我(总不能大老板问起谁谁谁去哪了我说不知道吧)。于是日子一长,我就混乱了(请下一个月的假到下个月我怎么可能记得啊喂)。想了想,决定做个 Workflow 把微信上发来的请假信息自动导入日历,因为我的日历和 Todoist 任务管理工具是同步的,所以它们也会相应地显示在 Todoist 里,起到提醒作用。

结果如图:

请输入图片标题

看起来很简单,Here we go!

理顺逻辑

我遇到的第一个问题是同事发来的微信每次对请假的表述都不一样,统计之后发现最主要的表达方式有两种:

中文日期的表述:罗恩12月1日-3日事假3天
英文日期的表述:罗恩12.1-12.3调休3天

解决方式无比简单:

1.获取剪贴板
2.判断 text 里是否含有「日」,如有,运行「日程添加中文模式」的 Workflow,否则,运行「日程添加英文模式」的 Workflow。

请输入图片标题

中文模式

普通情况

1.设定剪贴板变量为「text」
2.提取时间
如何提取文字里的时间呢?仔细观察发现,我们需要的信息为「12月1日-3日」,就是从「第一个数字」起,到「最后一个汉字‘日’」止。
利用匹配文本加万能的正则表达式,如下:

(\d[\s\S]*日)

请输入图片标题

其中,
\d 表示0-9的数字
\s 表示空白符
\S 表示非空白符
[\s\S] 表示任意字符
[\s\S]* 表示0个到任意多个字符(贪婪模式)
() 表示保留的文本

也就是说,上面的正则表达的含义是保留一段文本,第一个字符为数字,最后一个字符为文本里的最后一个「日」,中间是啥无所谓。这样我们就获得了「12月1日-3日」的结果。
Bingo!

3.设定获得的结果为变量「all」
4.设置开始时间和结束时间
观察文本,显而易见我们应该拆分文本获取开始和结束日期。
利用「-」分隔后我们得到了一个列表,第一项是「12月1日」,设置为开始日期。最后一项(第二项)为「3日」。

等等,这样日历是识别不出来的吧?
于是我们需要提取出「12月」,加到列表第二项组成「12月3日」。
有了前面正则的基础,这个问题也迎刃而解啦。正则如下:

(\d[\s\S]*月)

设定变量为「month」,加上之前「3日」设置变量为「halfday」,共同组成变量「endday」

请输入图片标题

等等等等等……
如果,这个请假时间是跨月的呢?比如,「9月30日-10月1日」?
于是我们需要在「-」之后的「halfday」变量里进行一次判定,如果包含「月」,说明这个日期是跨月的,直接设定为「endday」。否则,加上月份组成「endday」。

请输入图片标题

呼……真不容易啊。

例外情况

有普通情况,当然还有例外情况。很多人请假只请一天,于是会有

罗恩12月3日请假1天

注意到我们一开始拆分文本后获取列表的时候用的是「最后一项」而不是「第二项」了吗?这里藏了一个小心机。如果前面匹配到的是「12月3日」的形式,那拆分文本就不起作用,之后的列表里就只有一项,当然列表的第一项和最后一项都是「12月3日」。这个时候,我们只要对列表的最后一项进行判定,如果它包含第一项,也就是变量「startday」,那意味着开始日期等于结束日期。

然后就添加进日程吧!
(因为我添加的是过去的日程,如果直接添加MM月dd日,会自动跳到下一年。所以我在前面添加了「2018年」字样,Google & iCloud 会自动识别的)
(添加「办公室考勤」字样是为了方便在日历里搜索)

最终的结果如下:

请输入图片标题

英文模式

有了中文模式的历练,英文模式应该手到擒来吧?
想多了。

罗恩12.1-12.3调休3天

第一步,提取「12.1-12.3」,我绞尽脑汁,也没想出合适的正则表达式。无奈之下,采取了一个妥协的办法。现在微信复制已经可以选择文字了,于是我复制的时候去掉除了日期之外的其他数字,变成这样

罗恩12.1-12.3调休

那么提取日期的正则表达式为

(\d[\s\S]*\d)

即提取文本里第一个数字到最后一个数字之间的一切。

设定提取日期为变量「all」。老规矩,用「-」拆分文本,得到第一项,即开始日期「12.1」;第二项,「12.3」,结束日期。

问题来了,「12.1」无法被系统识别为日期。于是我们替换文本,得到「12/1」,利用 Workflow 自带的 format date,格式化日期为「MM月dd日」的格式,设定变量为「startday」。

接下来到获取月份的步骤。匹配文本

(\d*)

这样会把所有的数字匹配出来。我们只需要列表第一项,设定变量为「month」

第二个问题是,同事发给我的日期可能是「12.1-12.3」,也可能是「12.1-3」(同事你好同事再见),为了让日历识别出正确的结束日期,我们需要再次进行判定。显然,判定的标准就是「-」拆分后的第二项是否含有字符「.」

如果含有字符「.」,说明得到的是「12.3」格式,设置为变量「endday」。否则,说明得到的仅仅是「3」,设定变量为「halfend」(忽略我粗暴的取名方式),再把「month」和「halfend」加个「.」设置为「endday」。

和上面一样,替换文本并格式化日期,设定为最终版的「endday」。

添加到日历,大功告成!

最终结果如下

请输入图片标题

课后题

如果请假信息是「罗恩明天请假1天」呢?

最后

做完才发现,如果把请假信息导入新的日历里,就可以在日历里以月视图模式直接看公司整体请假情况啦。
以及,感谢罗恩同学的友情出演!祝你和你的食尸鬼一切顺利!