mirror of
https://github.com/cpvalente/ontime.git
synced 2026-09-07 15:29:10 +00:00
fix: implicit minutes parsing
This commit is contained in:
committed by
Carlos Valente
parent
14a99ce27b
commit
56775f621e
@@ -19,6 +19,7 @@ describe('test parseUserTime()', () => {
|
|||||||
{ value: '2m', expect: 2 * MILLIS_PER_MINUTE },
|
{ value: '2m', expect: 2 * MILLIS_PER_MINUTE },
|
||||||
{ value: '1h5s', expect: MILLIS_PER_HOUR + 5 * MILLIS_PER_SECOND },
|
{ value: '1h5s', expect: MILLIS_PER_HOUR + 5 * MILLIS_PER_SECOND },
|
||||||
{ value: '1h2m', expect: MILLIS_PER_HOUR + 2 * MILLIS_PER_MINUTE },
|
{ value: '1h2m', expect: MILLIS_PER_HOUR + 2 * MILLIS_PER_MINUTE },
|
||||||
|
{ value: '12h30', expect: 12 * MILLIS_PER_HOUR + 30 * MILLIS_PER_MINUTE },
|
||||||
];
|
];
|
||||||
|
|
||||||
for (const s of testData) {
|
for (const s of testData) {
|
||||||
|
|||||||
@@ -110,16 +110,20 @@ function inferSeparators(value: string, isAM: boolean, isPM: boolean) {
|
|||||||
* @param {string} value
|
* @param {string} value
|
||||||
*/
|
*/
|
||||||
function checkMatchers(value: string): number | null {
|
function checkMatchers(value: string): number | null {
|
||||||
const hoursMatch = /(\d+)h/i.exec(value);
|
// match hours with any digits after, but don't match digits that are part of seconds
|
||||||
|
const hoursMatch = /(\d+)h(?:(\d+)(?!s))?/i.exec(value);
|
||||||
const hoursMatchValue = hoursMatch ? parse(hoursMatch[1]) : 0;
|
const hoursMatchValue = hoursMatch ? parse(hoursMatch[1]) : 0;
|
||||||
|
// if there's a number after 'h' without a unit and it's not followed by 's', treat it as minutes
|
||||||
|
const implicitMinutesValue = hoursMatch?.[2] ? parse(hoursMatch[2]) : 0;
|
||||||
|
|
||||||
const minutesMatch = /(\d+)m/i.exec(value);
|
const minutesMatch = /(\d+)m/i.exec(value);
|
||||||
const minutesMatchValue = minutesMatch ? parse(minutesMatch[1]) : 0;
|
// only use implicit minutes if there's no explicit minutes match
|
||||||
|
const minutesMatchValue = minutesMatch ? parse(minutesMatch[1]) : implicitMinutesValue;
|
||||||
|
|
||||||
const secondsMatch = /(\d+)s/i.exec(value);
|
const secondsMatch = /(\d+)s/i.exec(value);
|
||||||
const secondsMatchValue = secondsMatch ? parse(secondsMatch[1]) : 0;
|
const secondsMatchValue = secondsMatch ? parse(secondsMatch[1]) : 0;
|
||||||
|
|
||||||
if (hoursMatchValue > 0 || minutesMatchValue > 0 || secondsMatchValue > 0) {
|
if (hoursMatch || minutesMatch || secondsMatch) {
|
||||||
return (
|
return (
|
||||||
hoursMatchValue * MILLIS_PER_HOUR + minutesMatchValue * MILLIS_PER_MINUTE + secondsMatchValue * MILLIS_PER_SECOND
|
hoursMatchValue * MILLIS_PER_HOUR + minutesMatchValue * MILLIS_PER_MINUTE + secondsMatchValue * MILLIS_PER_SECOND
|
||||||
);
|
);
|
||||||
|
|||||||
Reference in New Issue
Block a user