fix(HH-590): define realtime timestamp range (#151)
Co-authored-by: Rogee <rogee@ipao.vip>
This commit is contained in:
@@ -6,6 +6,7 @@ import {
|
||||
shortTimestamp,
|
||||
getDayDifferenceFromNow,
|
||||
hasOneDayPassed,
|
||||
isNewerTimestamp,
|
||||
} from 'shared/helpers/timeHelper';
|
||||
import { zhCN } from 'date-fns/locale';
|
||||
|
||||
@@ -20,6 +21,25 @@ afterEach(() => {
|
||||
vi.useRealTimers();
|
||||
});
|
||||
|
||||
describe('#isNewerTimestamp', () => {
|
||||
it.each([
|
||||
['Unix seconds', 1_700_000_000, 1_700_000_001],
|
||||
['numeric strings', '1700000000', '1700000001'],
|
||||
['early Unix milliseconds', 978_307_200_000, 1_700_000_000],
|
||||
['below the former 1e12 threshold', 999_999_999_999, 1_000_000_000_000],
|
||||
])('orders %s', (_label, current, next) => {
|
||||
expect(isNewerTimestamp(current, next)).toBe(true);
|
||||
});
|
||||
|
||||
it('preserves missing and invalid timestamp compatibility', () => {
|
||||
expect(isNewerTimestamp(null, 'invalid')).toBe(true);
|
||||
expect(isNewerTimestamp(1_700_000_000, null)).toBe(true);
|
||||
expect(isNewerTimestamp('invalid', 1_700_000_000)).toBe(true);
|
||||
expect(isNewerTimestamp(1_700_000_000, 'invalid')).toBe(false);
|
||||
expect(isNewerTimestamp(1_700_000_000, 9e15)).toBe(false);
|
||||
});
|
||||
});
|
||||
|
||||
describe('#messageStamp', () => {
|
||||
it('returns correct value', () => {
|
||||
expect(messageStamp(1612971343)).toEqual('3:35 PM');
|
||||
|
||||
@@ -6,11 +6,20 @@ import {
|
||||
differenceInDays,
|
||||
} from 'date-fns';
|
||||
|
||||
// Numeric realtime timestamps below 1e10 are Unix seconds (through 2286-11-20);
|
||||
// larger values are milliseconds, bounded by the ECMAScript Date range.
|
||||
const UNIX_SECONDS_LIMIT = 1e10;
|
||||
const DATE_MILLISECONDS_LIMIT = 8.64e15;
|
||||
|
||||
const normalizeTimestamp = value => {
|
||||
const numericValue =
|
||||
typeof value === 'string' && value.trim() ? Number(value) : value;
|
||||
if (typeof numericValue === 'number' && Number.isFinite(numericValue)) {
|
||||
return Math.abs(numericValue) < 1e12 ? numericValue * 1000 : numericValue;
|
||||
const timestamp =
|
||||
Math.abs(numericValue) < UNIX_SECONDS_LIMIT
|
||||
? numericValue * 1000
|
||||
: numericValue;
|
||||
return Math.abs(timestamp) <= DATE_MILLISECONDS_LIMIT ? timestamp : null;
|
||||
}
|
||||
if (typeof value !== 'string') return null;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user