laoyang
7ae595c8c2
生日卡重排:方框放"还剩几天"、右侧放农历日期 + 阳历日期 (#88)
用户 2026-11-05:「还有5天,也就是10月2号,这个不好。因为"还有5天"这个事情
比较重要,所以方形框里面应该写几天,比如还有5天就写5天;现在还有5天,
那个位置应该写上10月2日。如果是农历的话,就要写上农历十月二日。
下面还要写上阳历:换算完之后,今年阳历是多少?比如11月10日,
都放在右侧"满42周岁"这个位置。」
上一版信息分工正好是**反的**:方框里放了「日」(几号),右侧放了「还有 N 天」。
用户要的相反。
重排后:
方框(84x84 浅主题色块) = **还剩几天**(大数字)+ 下方「天」/「今天」
右侧第一行 = 日期(农历生日「农历十月初二」;其余「11月16日」)
右侧第二行 = 阳历换算(**只有农历生日才画**)
右侧第三行 = 满 N 周岁
服务端 Anniversary::occurrences() 补两个**成品文字**字段:
lunar_label = 「十月初二」「闰四月初五」(农历生日才有)
solar_md = 「11月10日」(今年实际发生那天的公历月日)
⚠️ 农历文字为什么不在端上拼:Lunar 有完整的月名/日名对照表
(正月/冬月/腊月、初一/廿三…),端上再抄一份必然漂移,
而且闰月(闰四月)这种特例得一起处理。
⚠️ solar_md 用 $date(今年换算后的实际日期)而不是 $a['month']/$a['day']:
农历生日的 month/day 是**农历**月日,直接拼出来会是错的公历。
⚠️ 公历生日时 dateSolar() 返回空串 ⇒ 不画第二行:
那时第一行已经是「11月16日」,再画一次一模一样,纯噪音。
⚠️ days = 0(就是今天)时方框写「今」而不是「0」:
0 看着像没数据,而且底下那行写「今天」,配成「今 / 今天」很奇怪。
实测服务端输出:
高雪玉 的农历生日 days=5 lunar=十月初二 solar=11月10日 date=2026-11-10
领证纪念日 days=7 lunar=(空) solar=11月12日 date=2026-11-12
杨永全 的农历生日 days=8 lunar=十月初五 solar=11月13日 date=2026-11-13
杨永全 的生日 days=11 lunar=(空) solar=11月16日 date=2026-11-16
刘巧莲 的农历生日 days=29 lunar=十月廿六 solar=12月4日 date=2026-12-04
编译通过,已装真机。
2026-11-05 20:39:45 +08:00
..
2026-11-05 13:06:29 +08:00
2026-09-30 00:49:53 +08:00
2026-09-30 13:24:26 +08:00
2026-11-05 20:39:45 +08:00
2026-10-19 12:51:17 +08:00
2026-10-18 03:34:47 +08:00
2026-11-05 20:19:36 +08:00
2026-10-18 03:34:47 +08:00
2026-11-05 13:01:39 +08:00
2026-11-01 19:55:40 +08:00
2026-10-02 09:28:07 +08:00
2026-10-03 08:18:05 +08:00
2026-10-05 10:58:17 +08:00
2026-10-05 10:58:17 +08:00
2026-10-05 10:58:17 +08:00
2026-11-01 19:55:40 +08:00
2026-10-15 20:19:09 +08:00
2026-11-05 17:26:37 +08:00
2026-10-13 11:53:58 +08:00
2026-10-06 20:41:04 +08:00
2026-10-01 00:12:04 +08:00
2026-10-13 11:53:58 +08:00
2026-10-17 00:15:06 +08:00
2026-09-30 00:49:53 +08:00
2026-09-30 00:49:53 +08:00
2026-10-19 23:41:15 +08:00
2026-10-05 13:26:49 +08:00
2026-10-18 20:14:50 +08:00
2026-11-05 12:40:57 +08:00
2026-11-05 20:23:16 +08:00
2026-11-02 08:51:34 +08:00
2026-10-18 03:34:47 +08:00
2026-10-24 04:25:02 +08:00
2026-10-05 10:58:17 +08:00
2026-11-02 16:07:45 +08:00
2026-10-05 10:58:17 +08:00
2026-10-03 08:18:05 +08:00
2026-10-20 21:35:47 +08:00
2026-09-30 09:44:55 +08:00
2026-10-18 11:35:13 +08:00
2026-10-07 18:22:55 +08:00
2026-10-19 23:41:15 +08:00
2026-10-01 00:12:04 +08:00
2026-10-11 10:12:11 +08:00
2026-10-28 12:48:47 +08:00
2026-10-28 12:48:47 +08:00
2026-09-30 13:24:26 +08:00
2026-10-05 16:45:10 +08:00
2026-10-28 16:03:36 +08:00
2026-10-09 07:25:08 +08:00
2026-10-15 23:04:25 +08:00
2026-10-19 17:27:37 +08:00
2026-10-19 15:27:08 +08:00
2026-10-03 19:27:14 +08:00
2026-10-18 03:34:47 +08:00
2026-10-15 23:04:25 +08:00
2026-10-17 00:15:06 +08:00
2026-10-03 11:30:48 +08:00
2026-10-07 11:35:31 +08:00
2026-10-02 22:08:13 +08:00
2026-10-03 11:30:48 +08:00
2026-10-03 15:01:38 +08:00
2026-11-05 12:40:57 +08:00
2026-09-30 00:49:53 +08:00
2026-10-06 03:14:18 +08:00
2026-11-05 20:19:36 +08:00
2026-11-02 16:07:45 +08:00
2026-11-05 12:40:57 +08:00
2026-10-02 09:28:07 +08:00
2026-09-30 11:06:22 +08:00
2026-10-13 11:53:58 +08:00
2026-10-05 16:45:10 +08:00
2026-11-05 13:01:39 +08:00
2026-11-01 19:55:40 +08:00
2026-10-14 01:20:40 +08:00
2026-10-08 10:54:43 +08:00