1440) { $agEnd = 1440; } $agEnds[] = $agEnd; } /* ⚠️ 变量名带 `ag` 前缀:这是**被 require 进来的片段**,裸赋值会撞上 宿主模板里的同名变量(流水线的"片段不许覆盖宿主变量"检查会拦下来)。 */ $startH = max(0, intdiv(min($agStarts), 60) - 1); /* 🔴 用**结束时间**的上界(向上取整到小时)—— 这就是本条的真修法。 `+1` 之后又 `ceil`:17:30 → ceil(1050/60)=18,留半小时缓冲;再 +0(不额外留 一小时),因为卡片本来就矮,"最后一个日程结束再画一整小时空行"太浪费。 */ $endH = min(24, (int)ceil(max($agEnds) / 60)); if ($endH <= intdiv(max($agStarts), 60)) { $endH = min(24, intdiv(max($agStarts), 60) + 1); } /* 🔴 v28 用户第 1 条:「今天的日程,并没有定位到红线所在的位置」。 根因:**区间里没有"现在"**,于是红线不画、定位算出来是越界值。 ⇒ 让区间永远包含当前时刻(用户要的正是"一眼看到现在处在哪儿")。 🔴🔴 v44 第 3 条:首页红线"停在整点"的真根因是这里以前用 `date('G')` (只取小时),而日程页用的是 `小时*60+分钟`。现在两处同一口径。 */ $nowHNow = (int)date('G'); if ($nowHNow < $startH) { $startH = max(0, $nowHNow - 1); } if ($nowHNow >= $endH) { $endH = min(24, $nowHNow + 2); } if ($endH <= $startH) { $endH = min(24, $startH + 2); } } $nowMinutes = ((int)date('G')) * 60 + (int)date('i'); $nowPos = (($nowMinutes / 60) - $startH) / max(1, ($endH - $startH)); $showNow = $nowPos >= 0 && $nowPos <= 1; /* 冲突分列(v30 第 2/4 条):与日程页同一套算法 —— 两条撞车就左右各半。 */ usort($timed, static function (array $a, array $b): int { return strcmp((string)($a['time'] ?? ''), (string)($b['time'] ?? '')); }); $laneInfo = \App\Calendar::conflictLanes($timed); foreach ($timed as $i => &$evRef) { [$l, $w] = $laneInfo[$i] ?? [0.0, 1.0]; $evRef['left'] = round($l * 100, 4); $evRef['width'] = round($w * 100, 4); } unset($evRef); ?>

今天没有安排。

0) { $evEdit = url('calendar/event', ['id' => $evRef, 'embed' => 1]); } elseif ($evKind === 'movie' && $evRef > 0) { $evEdit = url('movies/edit', ['id' => $evRef, 'embed' => 1]); } elseif ($evKind === 'task' && $evRef > 0) { $evEdit = url('tasks/edit', ['id' => $evRef]); } elseif ($evKind === 'anniv' && $evRef > 0) { $evEdit = url('days/edit', ['id' => $evRef, 'embed' => 1]); } ?> '> 全天
0) { $evEdit = url('calendar/event', ['id' => $evRef, 'embed' => 1]); } elseif ($evKind === 'movie' && $evRef > 0) { $evEdit = url('movies/edit', ['id' => $evRef, 'embed' => 1]); } elseif ($evKind === 'task' && $evRef > 0) { $evEdit = url('tasks/edit', ['id' => $evRef]); } elseif ($evKind === 'anniv' && $evRef > 0) { $evEdit = url('days/edit', ['id' => $evRef, 'embed' => 1]); } ?> ' style="background: ; top: %; height: %; left: calc(% + 2px); width: calc(% - 4px);" title="" data-cal="">