Improve dayMsToDecimal precision and add tests

This commit is contained in:
Quantum 2022-02-27 03:29:51 -05:00
parent fe94f995c0
commit 46b24e7993
2 changed files with 57 additions and 4 deletions

54
src/TimeOfDay.test.ts Normal file
View file

@ -0,0 +1,54 @@
import {dayMsToDecimal, decimalToDayMs} from './TimeOfDay';
describe('dayMsToDecimal', () => {
it('works', () => {
const expected = {hour: 0, minute: 0, second: 0};
let ms = 0;
function hour() {
for (let i = 0; i < 10000; ++i) {
expect(dayMsToDecimal(ms++)).toStrictEqual(expected);
expect(dayMsToDecimal(ms)).toStrictEqual(expected);
ms += 862;
expect(dayMsToDecimal(ms++)).toStrictEqual(expected);
if (++expected.second >= 100) {
expected.second = 0;
if (++expected.minute >= 100) {
expected.minute = 0;
++expected.hour;
}
}
}
}
hour();
hour();
expected.hour += 7;
ms += 864 * 10_000 * 7;
hour();
expect(ms).toStrictEqual(86_400_000);
expect(expected).toStrictEqual({hour: 10, minute: 0, second: 0});
});
});
describe('decimalToDayMs', () => {
it('works', () => {
function hour(hour: number) {
let expected = hour * 8_640_000;
for (let minute = 0; minute < 100; ++minute) {
for (let second = 0; second < 100; ++second) {
expect(decimalToDayMs({hour, minute, second})).toStrictEqual(expected);
expected += 864;
}
}
expect(expected).toEqual((hour + 1) * 8_640_000);
}
hour(0);
hour(9);
});
})

View file

@ -17,10 +17,9 @@ function currentDayMs(): number {
}
export function dayMsToDecimal(dayMs: number): DecimalTimeStamp {
const dayFrac = dayMs / 86_400_000;
const hour = Math.floor(dayFrac * 10);
const minute = Math.floor(dayFrac * 10 % 1 * 100);
const second = Math.floor(dayFrac * 1000 % 1 * 100);
const second = Math.floor(dayMs / 864 % 100);
const minute = Math.floor(dayMs / 86_400 % 100);
const hour = Math.floor(dayMs / 8_640_000);
return {hour, minute, second};
}