// 宠物档案里那些「有数据但没露出」的东西。字段后端早就返回了,只是没人用。 // 单独放一个文件而不是塞在 home.js 里:身份卡、宠友主页以后都要用同一套算法。 // 星座。按公历日期分段,边界日取「这一天起算下一个星座」 const ZODIAC = [ [1, 20, '水瓶座'], [2, 19, '双鱼座'], [3, 21, '白羊座'], [4, 20, '金牛座'], [5, 21, '双子座'], [6, 22, '巨蟹座'], [7, 23, '狮子座'], [8, 23, '处女座'], [9, 23, '天秤座'], [10, 24, '天蝎座'], [11, 23, '射手座'], [12, 22, '摩羯座'], ]; function zodiac(birthday) { if (!birthday) return ''; const p = String(birthday).slice(0, 10).split('-'); if (p.length < 3) return ''; const m = +p[1], d = +p[2]; if (!m || !d) return ''; // 12 月 22 日之后到 1 月 19 日都是摩羯 for (let i = 0; i < ZODIAC.length; i++) { const [zm, zd, name] = ZODIAC[i]; if (m === zm) return d >= zd ? name : ZODIAC[(i + 11) % 12][2]; } return ''; } // 一起生活了多少天。优先用到家日期——「我们一起生活的第 N 天」说的是 // 它到你家之后的日子,不是它出生之后的日子。没填到家日就退回建档日。 function daysTogether(pet) { const from = (pet && (pet.arrived_at || pet.created_at)) || ''; if (!from) return 0; const d = new Date(String(from).slice(0, 10) + 'T00:00:00'); if (isNaN(d.getTime())) return 0; const days = Math.floor((Date.now() - d.getTime()) / 86400000) + 1; return days > 0 ? days : 0; } // 性别徽章。后端存的是「男孩 / 女孩 / 不确定」 function genderBadge(gender) { if (gender === '男孩') return { icon: '♂', tone: 'male' }; if (gender === '女孩') return { icon: '♀', tone: 'female' }; return { icon: '', tone: '' }; } module.exports = { zodiac, daysTogether, genderBadge };