fix(date): %s returns Unix epoch unaffected by display timezone (#932)

The %s handler read LiquidDate.getTime(), which returns the
displayDate deliberately shifted by the display timezone offset for
wall-clock getters. With a timezone argument or timezoneOffset
option set, %s produced an epoch shifted by (server offset - display
offset) instead of the true Unix timestamp.

Expose the unshifted time as LiquidDate.dateValue() and use it for
%s. Also switch Math.round to Math.floor so fractional seconds
truncate toward the epoch like Ruby strftime.

Fixes #931
This commit is contained in:
amit777
2026-07-10 23:13:07 +08:00
committed by GitHub
parent 050f161794
commit 39c87437c5
4 changed files with 23 additions and 1 deletions
+1 -1
View File
@@ -105,7 +105,7 @@ const formatCodes: Record<string, FormatCodeHandler> = {
p: (d: LiquidDate) => (d.getHours() < 12 ? 'AM' : 'PM'),
P: (d: LiquidDate) => (d.getHours() < 12 ? 'am' : 'pm'),
q: (d: LiquidDate) => ordinal(d),
s: (d: LiquidDate) => Math.round(d.getTime() / 1000),
s: (d: LiquidDate) => Math.floor(d.dateValue() / 1000),
S: (d: LiquidDate) => d.getSeconds(),
u: (d: LiquidDate) => d.getDay() || 7,
U: (d: LiquidDate) => getWeekOfYear(d, 0),