周末✅
小周闹钟没响,害我迟到❌
大周闹钟还响,吵我睡懒觉❌
周末当然是件开心的事,一下班就打卡,出了公司门的那一刻,美好周末扑面而来🥳
但大小周忘记调闹钟就惨兮兮😱
❓自定义闹钟通过第三方闹钟App可以解决,为什么还要用iOS自带的快捷指令
因为快捷指令还会有更广泛的适应性,应对大小周不在话下,而且有更多发挥的能力,节假日搞得定,稍微复杂一点的排班也能应对。 往“方法论”上面靠,解决的就不止是闹钟这一个具体问题,本质是在把“特定时间、特定条件下,是否需要执行某个动作”从固定规则,转变成灵活的条件判断。 一旦理解这一层,所有基于周期、特定条件、状态变化的行为系统,都可以用类似的思路重构。 |
🧩这篇我们不贪多,先一起实现『在大小周情况下某天要不要上班』的逻辑,在这个过程中我们会习得以下技能:
1. 把一个大需求拆解开的思路 2. 知道一个步骤要用哪个操作来实现 3. 变量的使用 4. 日期的计算,以及日期格式化中的坑 5. 文本和数值的不同 6. 数值的模运算 |
🍺在动手编排指令之前,首先全盘考虑一下:在大小周情况下,怎么判断某天要不要上班?
按照一般情况,周一至周五都要上班;而周日总是休息。 ↓ 周六上不上班?要看是不是小周。 ↓ 已知某周是大周, 接下来就是:小周 大周 小周 大周 ... ↓ 那可以通过计算“周差”来判断本周是不是小周。 ↓ 把『大周的周日』作为基准,拿当天日期和基准日期对比得到“周差” ↓ “周差”如果是奇数「周差%2==1」,那就是小周,就要上班。 ↓ 最终输出一个值0或1,代表是不是要上班。0=不上班,1=上班。 |
| 13-18号与之相比,相差不足7天,“周差”是0。19-25号与之相比,相差达到7天但不足14天,“周差”是1。所以选择周日为基准日期,并约定一周的开始是周日(如日历排版所示),那么计算周差就比较直观了。 |
🚀理论部分搞定!现在我们把逻辑落地,一步步搭出完整的大小周判断逻辑。下面有长截图,并在一旁批注了比较重要的知识点。
❗接下来复盘一下,这个指令编排过程中,一些比较重要的信息。EEE, dd MMM yyyy HH:mm:ss Z 周六, 25 4月 2026 17:04:52 +0800 通过对照,可以知晓日期是如何格式化的,借此我们就可以获得对应的值,例如EEE对应周几。 |
⚠️日期格式化中的坑1:地区和语言对日期格式化的影响
一定要知晓,“EEE”不一定就显示“周几”,也可能是“星期几”,当然如果是英语或其他国家,显示内容自然又不同了。 那为了便于我们计算,“周几”的格式化字符,强烈建议用小写“e”,它返回数字1-7,对应周日-周六。没错,周日是一周的第一天。为便于对应记忆,周几=数字-1 |
⚠️日期格式化中的坑2:类型的区别
虽然看起来,“e”返回的数字1-7,但实际上是“1”-“7”,就是说,会当做字符类型来处理,没法按数字去做运算。 因此一定要转换成数值类型,再做运算。 |
🚥扩展规则,应对节假日调休
| 我们已经理清楚了“大小周”的工作日判断逻辑,关键是在“周差”。接下来节假日调休、补班的问题,用同样的「条件判断」思路,也能轻松搞定。临近“五一”劳动节了,不妨打开“日历”App看看,哪天休假?哪天补班?先透露一下,关键是在“日程”。其实,指令编排的功夫,是在指令之外。编程序写代码的功夫,也并不是在打字速度上呀😝 |
🌈下一篇文章,将会介绍『节假日的情况下某天是否要上班』的判断逻辑。
那么在文章发布之前,可以先尝试完成本篇的指令内容。而节假日的判断逻辑,将会在本篇基础上补充上来。
最后,我们将会得到一个完全感知不到存在的自动化闹钟~
祝:假期愉快🏖️🥤📸