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),