From 7ae595c8c2aa25237e37dfd4e0e222fc6026d8c2 Mon Sep 17 00:00:00 2001 From: laoyang Date: Thu, 5 Nov 2026 20:39:45 +0800 Subject: [PATCH] =?UTF-8?q?=E7=94=9F=E6=97=A5=E5=8D=A1=E9=87=8D=E6=8E=92?= =?UTF-8?q?=EF=BC=9A=E6=96=B9=E6=A1=86=E6=94=BE"=E8=BF=98=E5=89=A9?= =?UTF-8?q?=E5=87=A0=E5=A4=A9"=E3=80=81=E5=8F=B3=E4=BE=A7=E6=94=BE?= =?UTF-8?q?=E5=86=9C=E5=8E=86=E6=97=A5=E6=9C=9F=20+=20=E9=98=B3=E5=8E=86?= =?UTF-8?q?=E6=97=A5=E6=9C=9F=20(#88)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 用户 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 编译通过,已装真机。 --- app/Anniversary.php | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/app/Anniversary.php b/app/Anniversary.php index 02fd8e7..bc36857 100644 --- a/app/Anniversary.php +++ b/app/Anniversary.php @@ -672,6 +672,27 @@ final class Anniversary 用户要看的是"生日那天"(农历初五就该显示 5)。 */ 'day' => (int)($a['day'] ?? 0), 'month' => (int)($a['month'] ?? 0), + /* 🔴 #88(用户 2026-11-05):卡片右侧要显示两种日期写法 —— + 「如果是农历的话,就要写上农历十月二日。下面还要写上阳历: + 换算完之后,今年阳历是多少?比如11月10日」 + + ⇒ 服务端直接给**成品文字**,端上不自己拼: + · `lunar_label` = 「十月二日」/「闰四月初五」(农历生日才有;其余空) + · `solar_md` = 「11月10日」(今年实际发生那天的公历月日) + + ⚠️ 农历文字为什么不在端上拼:`Lunar` 有完整的月名/日名对照表 + (正月/冬月/腊月、初一/廿三…),端上再抄一份必然漂移, + 而且闰月(闰四月)这种特例得一起处理。 + ⚠️ `solar_md` 用 `$date`(今年换算后的实际日期)而不是 `$a['month']/$a['day']`: + 农历生日的 month/day 是**农历**月日,直接拼出来会是错的公历。 + ⚠️ 农历生日时 `lunar_label` 用 `$a['month']/$a['day']`(才是农历月日); + 公历生日时留空 —— 那时"农历"这一行没有意义。 */ + 'lunar_label' => ($repeat === 'lunar' && $m >= 1 && $d >= 1) + ? (\App\Lunar::monthName($m, !empty($a['is_leap'])) . \App\Lunar::dayName($d)) + : '', + 'solar_md' => (strlen((string)$date) >= 10) + ? ((int)substr((string)$date, 5, 2)) . '月' . ((int)substr((string)$date, 8, 2)) . '日' + : '', 'source' => (string)($a['source'] ?? 'custom'), 'note' => (string)($a['note'] ?? ''), 'id' => (int)($a['id'] ?? 0),