diff --git a/src/services/search/expressions/order_by_and_limit.ts b/src/services/search/expressions/order_by_and_limit.ts index 9d0ff31c85..7169e5d021 100644 --- a/src/services/search/expressions/order_by_and_limit.ts +++ b/src/services/search/expressions/order_by_and_limit.ts @@ -68,8 +68,16 @@ class OrderByAndLimitExp extends Expression { return larger; } + + // if both are dates, then parse them for dates comparison + if (typeof valA === "string" && this.isDate(valA) && + typeof valB === "string" && this.isDate(valB)) { + valA = new Date(valA); + valB = new Date(valB); + } + // if both are numbers, then parse them for numerical comparison - if (typeof valA === "string" && this.isNumber(valA) && + else if (typeof valA === "string" && this.isNumber(valA) && typeof valB === "string" && this.isNumber(valB)) { valA = parseFloat(valA); valB = parseFloat(valB); @@ -99,6 +107,10 @@ class OrderByAndLimitExp extends Expression { return noteSet; } + isDate(date: number | string) { + return (new Date(date) !== "Invalid Date") && !isNaN(new Date(date)); + } + isNumber(x: number | string) { if (typeof x === 'number') { return true;