Summary
A pure date field (no time component, a business date such as a period end) is rendered as relative text whenever the value is within ±7 days of today: 3天前, 明天, 昨天. Outside that window it renders the calendar date. In a list this produces two visually different formats in the same column set, and the relative text hides the actual date a user needs to read (an assessment period end is a business date, not a "how long ago" fact).
Minimal reproduction
Platform 17.2.0 console, today = 2026-09-03.
Object kpi_plan with period_start: Field.date({ label: '周期开始' }) = 2026-08-01 and period_end: Field.date({ label: '周期结束' }) = 2026-08-31.
List view columns period_start, period_end:
周期开始 8月1日 ← calendar date (34 days ago, outside the window)
周期结束 3天前 ← relative (3 days ago, inside the window)
Detail page shows the same. The audit timestamps (created_at etc.) are datetimes and are a separate case.
Where
ui-components chunk, date display formatter:
function Ltt(e, t) {
...
let o = Math.round((dateOnly(value) - dateOnly(today)) / 864e5);
if (o < -7 || o > 7) return k9(n, void 0, t); // calendar date
if (o < -1 && t?.dueLike) return t.t('fields.relativeDate.overdue', {count: -o}) ...
return Itt(o, t?.locale); // Intl.RelativeTimeFormat(..., 'day')
}
The relative branch is unconditional for the ±7-day window; dueLike only changes the wording.
Expected
date fields render the calendar date by default, in both list cells and detail pages. A business date is a value the user reads and compares; relative wording loses the value.
- Relative wording should be opt-in per field / column (e.g.
display: 'relative', or only when the field is flagged dueLike), or shown as a secondary hint (tooltip / muted suffix) next to the actual date.
- If the default must stay relative, at least apply it consistently (both
8月1日 and 3天前 in one row is the worst of both).
Environment
@objectstack/console 17.2.0 · objectstack dev · Chrome · locale zh-CN. App: objectstack-ai/kpi, object kpi_plan.
Summary
A pure
datefield (no time component, a business date such as a period end) is rendered as relative text whenever the value is within ±7 days of today:3天前,明天,昨天. Outside that window it renders the calendar date. In a list this produces two visually different formats in the same column set, and the relative text hides the actual date a user needs to read (an assessment period end is a business date, not a "how long ago" fact).Minimal reproduction
Platform 17.2.0 console, today = 2026-09-03.
Object
kpi_planwithperiod_start: Field.date({ label: '周期开始' })=2026-08-01andperiod_end: Field.date({ label: '周期结束' })=2026-08-31.List view columns
period_start, period_end:Detail page shows the same. The audit timestamps (
created_atetc.) are datetimes and are a separate case.Where
ui-componentschunk, date display formatter:The relative branch is unconditional for the ±7-day window;
dueLikeonly changes the wording.Expected
datefields render the calendar date by default, in both list cells and detail pages. A business date is a value the user reads and compares; relative wording loses the value.display: 'relative', or only when the field is flaggeddueLike), or shown as a secondary hint (tooltip / muted suffix) next to the actual date.8月1日and3天前in one row is the worst of both).Environment
@objectstack/console17.2.0 ·objectstack dev· Chrome · locale zh-CN. App: objectstack-ai/kpi, objectkpi_plan.