Files
mama-box/topic/rizi-js/index.html

124 lines
12 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no,viewport-fit=cover">
<meta name="format-detection" content="telephone=no">
<title>满月、百天、周岁是哪天</title>
<!-- 孕期计算器 · 满月、百天、周岁是哪天(2026-11-06 用户从 20 个备选里选了 5 个,本页是其中之一)。
按生日(没出生就按预产期)排出满月、双满月、百天、半岁、周岁:公历、星期、农历、还有几天;可选「不是周末就给附近的周末」。
怎么数天两种习惯都给:出生当天算第 1 天(满月 = 生日 + 29 天、百天 = 生日 + 99 天),或第二天算第 1 天(各 +1)。半岁、周岁按日历月。
农历用下面 LN 表(2024-02-10 ~ 2031-12 每个农历月初一,[距 1970-01-01 的天数, 农历年, 月, 闰],由 python lunardate 生成);超出范围就不显示农历。
共用 ../_shared/calc.css + calc.js(返回 / 禁回弹 / 日期按北京时间 / 记住上次填的值);自成一页,不引 app.js。 -->
<link rel="stylesheet" href="../_shared/calc.css?v=26110464">
<link rel="stylesheet" href="../_shared/wizard.css?v=26110464">
<style>:root{--c:#E8774E;--c2:#FFAA85;--cbg:#FFF1EA}#res .row b{font-size:17px;white-space:nowrap}.res .row b small{display:block;font-size:11.5px;font-weight:600;opacity:.9}.tl .m span.lu{color:var(--c);font-weight:700}</style>
</head>
<body>
<div id="scroll">
<header class="bar" id="bar">
<button class="back" id="back" aria-label="返回"><svg viewBox="0 0 24 24"><path d="M15 5l-7 7 7 7"/></svg></button>
<span class="t">孕期计算器</span>
</header>
<section class="hd"><p>孕期计算器</p><h1>满月、百天、周岁是哪天</h1><span>公历、农历、星期几一起排好,提前订酒席、约拍照</span></section>
<section class="calc">
<div class="res" id="res"><div class="empty">填好日期,马上排出来</div></div>
<div class="fld"><span class="lb">宝宝出生了吗</span><div class="seg s2" id="cBorn"><button type="button" data-v="1">已经出生</button><button type="button" data-v="0">还没出生</button></div></div>
<div class="fld"><label class="lb" for="cD" id="lbD">宝宝生日</label><input class="in num" type="date" id="cD">
<span class="hint" id="hD">还没出生就填预产期;预产期前后 2 周出生都正常,生了以后回来改成生日就行</span></div>
<div class="fld"><span class="lb">从哪天开始数</span><div class="seg s2" id="cCnt"><button type="button" data-v="1">出生当天算第 1 天</button><button type="button" data-v="2">出生第二天算第 1 天</button></div>
<span class="hint">各地习惯不一样,多数地方按出生当天算;拿不准就问问家里老人</span></div>
<div class="fld"><span class="lb">打算怎么过</span><div class="seg s2" id="cPlan"><button type="button" data-v="jiu">办酒席</button><button type="button" data-v="pai">拍照留念</button><button type="button" data-v="all">酒席、拍照都要</button><button type="button" data-v="jian">家里简单过</button></div></div>
<div class="fld"><span class="lb">正日子不是周末,要不要找附近的周末</span><div class="seg s2" id="cWk"><button type="button" data-v="1">要,方便亲戚来</button><button type="button" data-v="0">不用,就按正日子</button></div></div>
</section>
<section class="sec">
<h2>宝宝的大日子</h2>
<p class="lead" id="lead">按你填的日期排</p>
<ul class="tl" id="tl"></ul>
</section>
<section class="sec">
<h2>提前要做的事</h2>
<div class="cards" id="todo"></div>
</section>
<p class="foot">日期按北京时间计算;各地风俗不同,以家里习惯为准。</p>
</div>
<script src="../_shared/calc.js?v=26110464"></script>
<script>
(function () {
'use strict';
var C = window.CK, $ = C.$, DAY = C.DAY;
C.shell();
var LN = [[19763,2024,1],[19792,2024,2],[19822,2024,3],[19851,2024,4],[19880,2024,5],[19910,2024,6],[19939,2024,7],[19969,2024,8],[19999,2024,9],[20028,2024,10],[20058,2024,11],[20088,2024,12],[20117,2025,1],[20147,2025,2],[20176,2025,3],[20206,2025,4],[20235,2025,5],[20264,2025,6],[20294,2025,6,1],[20323,2025,7],[20353,2025,8],[20382,2025,9],[20412,2025,10],[20442,2025,11],[20472,2025,12],[20501,2026,1],[20531,2026,2],[20560,2026,3],[20590,2026,4],[20619,2026,5],[20648,2026,6],[20678,2026,7],[20707,2026,8],[20736,2026,9],[20766,2026,10],[20796,2026,11],[20826,2026,12],[20855,2027,1],[20885,2027,2],[20915,2027,3],[20944,2027,4],[20974,2027,5],[21003,2027,6],[21032,2027,7],[21062,2027,8],[21091,2027,9],[21120,2027,10],[21150,2027,11],[21180,2027,12],[21209,2028,1],[21239,2028,2],[21269,2028,3],[21299,2028,4],[21328,2028,5],[21358,2028,5,1],[21387,2028,6],[21416,2028,7],[21446,2028,8],[21475,2028,9],[21504,2028,10],[21534,2028,11],[21564,2028,12],[21593,2029,1],[21623,2029,2],[21653,2029,3],[21682,2029,4],[21712,2029,5],[21741,2029,6],[21771,2029,7],[21800,2029,8],[21830,2029,9],[21859,2029,10],[21888,2029,11],[21918,2029,12],[21948,2030,1],[21977,2030,2],[22007,2030,3],[22036,2030,4],[22066,2030,5],[22096,2030,6],[22125,2030,7],[22155,2030,8],[22184,2030,9],[22214,2030,10],[22243,2030,11],[22273,2030,12],[22302,2031,1],[22331,2031,2],[22361,2031,3],[22391,2031,3,1],[22420,2031,4],[22450,2031,5],[22479,2031,6],[22509,2031,7],[22539,2031,8],[22568,2031,9],[22598,2031,10],[22627,2031,11]];
var MN = ['', '正', '二', '三', '四', '五', '六', '七', '八', '九', '十', '冬', '腊'];
var DN = ['初一', '初二', '初三', '初四', '初五', '初六', '初七', '初八', '初九', '初十', '十一', '十二', '十三', '十四', '十五', '十六', '十七', '十八', '十九', '二十', '廿一', '廿二', '廿三', '廿四', '廿五', '廿六', '廿七', '廿八', '廿九', '三十'];
function lunar(t) {
var d = Math.round(t / DAY), k = -1;
for (var i = 0; i < LN.length; i++) { if (LN[i][0] <= d) k = i; else break; }
if (k < 0 || k === LN.length - 1) return '';
var m = LN[k];
return '农历' + (m[3] ? '闰' : '') + MN[m[2]] + '月' + DN[d - m[0]];
}
var st = C.store('mmbox.calc.rizi', { born: '', d: '', cnt: 1, plan: '', wk: '' });
if (!st.d && st.born !== 1) { var sd = C.savedDue(); if (!isNaN(sd)) st.d = C.fmt(sd); }
var inp = $('#cD'); inp.value = st.d;
inp.addEventListener('input', function () { st.d = inp.value; paint(); });
C.seg($('#cBorn'), st, 'born', paint); C.seg($('#cCnt'), st, 'cnt', paint); C.seg($('#cPlan'), st, 'plan', paint); C.seg($('#cWk'), st, 'wk', paint);
/* 离 t 最近的周六或周日(同样近取前面那个) */
function wkend(t) {
var w = new Date(t).getUTCDay(); if (w === 0 || w === 6) return t;
var back = w, fwd = 6 - w; /* 往前到上个周日要 w 天,往后到周六要 6-w 天 */
return fwd <= back ? t + fwd * DAY : t - back * DAY;
}
function left(t) { var n = Math.round((t - C.today()) / DAY); return n > 0 ? '还有 ' + n + ' 天' : n === 0 ? '就是今天' : '已过 ' + (-n) + ' 天'; }
function md(t) { var d = new Date(t); return (d.getUTCMonth() + 1) + ' 月 ' + d.getUTCDate() + ' 日'; }
function paint() {
st.save();
$('#lbD').textContent = st.born === 0 ? '预产期' : '宝宝生日';
var b = C.parse(st.d), R = $('#res');
if (isNaN(b)) { R.innerHTML = '<div class="empty">填好日期,马上排出来</div>'; $('#tl').innerHTML = ''; $('#todo').innerHTML = ''; return; }
var off = st.cnt === 2 ? 1 : 0;
var L = [
['满月', b + (29 + off) * DAY, '出生第 30 天', '办满月酒、给亲友报喜;宝宝 42 天还要去医院体检'],
['双满月', b + (59 + off) * DAY, '出生第 60 天', '宝宝开始会对着人笑,适合拍第一组表情照'],
['百天', b + (99 + off) * DAY, '出生第 100 天', '百天照、百日宴;宝宝能抬头了,拍照最好拍'],
['半岁', C.addMonths(b, 6), '满 6 个月', '开始添加辅食的时候,也可以拍半岁纪念照'],
['周岁', C.addMonths(b, 12), '满 1 周岁', '抓周、周岁宴、全家福']
];
var wk = st.wk === 1;
$('#lead').textContent = (st.born === 0 ? '按预产期 ' : '按生日 ') + C.cn(b, 1) + ' 排' + (st.born === 0 ? ',生了以后回来改成生日会更准' : '');
$('#tl').innerHTML = L.map(function (x) {
var t = x[1], we = wkend(t), now = Math.round((t - C.today()) / DAY), lu = lunar(t);
return '<li class="' + (now < 0 ? 'done' : '') + '"><span class="d"></span><div class="m"><b>' + x[0] + '<em>' + x[2] + '</em></b>' +
'<span><i>' + C.cn(t, 1) + ' ' + C.wd(t) + '</i> · ' + left(t) + '</span>' + (lu ? '<span class="lu">' + lu + '</span>' : '') +
(wk && we !== t ? '<span>附近的周末:<i>' + md(we) + ' ' + C.wd(we) + '</i></span>' : '') + '<span>' + x[3] + '</span></div></li>';
}).join('');
var nx = L.filter(function (x) { return x[1] >= C.today(); })[0] || L[4];
R.innerHTML = '<small>' + (nx[1] >= C.today() ? '下一个大日子:' : '') + nx[0] + (C.cn(nx[1], 1).slice(0, 4) !== C.cn(C.today(), 1).slice(0, 4) ? '(' + C.cn(nx[1], 1).slice(0, 4) + ' 年)' : '') + '是</small><span class="big num">' + md(nx[1]) + '<u>' + C.wd(nx[1]) + '</u></span>' +
'<div class="row">' + [L[0], L[2], L[4]].map(function (x) { return '<div><small>' + x[0] + '</small><b class="num">' + md(x[1]).replace(/ /g, '') + '<small>' + C.wd(x[1]) + (lunar(x[1]) ? '<br>' + lunar(x[1]).replace('农历', '') : '') + '</small></b></div>'; }).join('') + '</div>' +
'<span class="note">' + nx[0] + left(nx[1]) + (wk && wkend(nx[1]) !== nx[1] ? ';想办在周末可以定 ' + md(wkend(nx[1])) + C.wd(wkend(nx[1])) : '') + '。</span>';
var td = [];
var plan = st.plan;
if (plan === 'jiu' || plan === 'all') td.push(['订酒店', '满月酒提前 1 个月左右订,周末的好日子更抢手;百日宴、周岁宴提前 1~2 个月。满月时妈妈刚出月子,酒席别太累,也可以和百天合办。']);
if (plan === 'pai' || plan === 'all') td.push(['约拍照', '百天照、周岁照提前 2~4 周约摄影;百天宝宝能抬头、会笑,最好拍。约上午宝宝睡醒吃饱的时段,带两套换洗衣服。']);
if (plan === 'jian') td.push(['家里过也有仪式感', '拍张和满月、百天数字牌的合照,写几句话给宝宝;周岁可以在家抓周。']);
td.push(['42 天体检', '满月后别忘了出生第 42 天左右,妈妈和宝宝一起去医院做产后复查。']);
if (st.born === 0) td.push(['先别订死', '预产期只是估算,提前或推后两周都常见;酒店可以先问档期,生了以后再按真实生日定。']);
$('#todo').innerHTML = td.map(function (x) { return '<div class="cd"><div class="k"><b>' + x[0] + '</b></div><p>' + x[1] + '</p></div>'; }).join('');
}
paint();
})();
</script>
<script src="../_shared/brand.js?v=26110203"></script>
<script src="../../js/share-card.js?v=26110464"></script>
<script>window.mbShare('../../assets/share/t/rizi-js.jpg', '满月、百天、周岁是哪天:公历农历星期几一起排好'); /* 11-06 微信转发图 */</script>
<!-- 分步模式:一步一题、最后出结果(同生娃计算器),见 ../_shared/wizard.js -->
<script src="../_shared/wizard.js?v=26110464"></script>
<script>CKW.init({ root: '.calc', res: '#res', after: '#scroll > section.calc ~ *' });</script>
<script src="../../js/last-sub.js?v=26110905"></script> <!-- 11-07 小程序刷新回到这一页(见 js/last-sub.js) -->
<script src="../../js/pv.js?v=26110653"></script> <!-- 11-07 页面访问记录(推送效果看板,见 js/pv.js) -->
</body>
</html>