diff --git a/src/backend/model/database/SearchManager.ts b/src/backend/model/database/SearchManager.ts index 9977ca65..75010fdb 100644 --- a/src/backend/model/database/SearchManager.ts +++ b/src/backend/model/database/SearchManager.ts @@ -779,7 +779,7 @@ export class SearchManager { break; case DatePatternFrequency.months_ago: - to.setTime(Utils.addMonthToDate(to, -1 * tq.agoNumber).getTime()); + to.setUTCMonth(to.getUTCMonth() - tq.agoNumber); break; case DatePatternFrequency.years_ago: diff --git a/src/common/Utils.ts b/src/common/Utils.ts index 4cafa1ad..a9a7a862 100644 --- a/src/common/Utils.ts +++ b/src/common/Utils.ts @@ -220,19 +220,6 @@ export class Utils { return dayOfYear; } - //Adding months to a date differently from standard JS - //this function makes sure that if date is the 31st and you add a month, you will get the last day of the next month - //so adding or subtracting a month from 31st of march will give 30th of april or 28th of february respectively (29th on leap years). - static addMonthToDate(date: Date, numMonths: number) { - const result = new Date(date) - const expectedMonth = ((date.getMonth() + numMonths) % 12 + 12) % 12; //inner %12 + 12 makes correct handling of negative months - result.setMonth(result.getMonth() + numMonths); - if (result.getMonth() !== expectedMonth) { - result.setDate(0); - } - return result; - } - static renderDataSize(size: number): string { const postFixes = ['B', 'KB', 'MB', 'GB', 'TB']; let index = 0; diff --git a/test/backend/unit/model/sql/SearchManager.spec.ts b/test/backend/unit/model/sql/SearchManager.spec.ts index 33ec8e60..44f42ff3 100644 --- a/test/backend/unit/model/sql/SearchManager.spec.ts +++ b/test/backend/unit/model/sql/SearchManager.spec.ts @@ -132,9 +132,18 @@ describe('SearchManager', (sqlHelper: DBTestHelper) => { delete pFaceLessTmp.metadata.faces; d = new Date(); //we create a date 1 month and 1 day before now - d = Utils.addMonthToDate(d, -1); //subtract 1 month in the "human way" - d.setDate(d.getDate()-1); //subtract 1 day - pFaceLessTmp.metadata.creationDate = d.getTime(); + if ([1, 3, 5, 7, 8, 10, 0].includes(d.getMonth())) { + //Now is a month after a long month: feb (1), april (3), june (5), august(7), september(8), november (10), january (0) + pFaceLessTmp.metadata.creationDate = d.getTime() - 60 * 60 * 24 * 32 * 1000; + } else if (d.getMonth() == 2 && Utils.isDateFromLeapYear(d)) { + //march on leap years + pFaceLessTmp.metadata.creationDate = d.getTime() - 60 * 60 * 24 * 30 * 1000; + } else if (d.getMonth() == 2) { + //march (and not leap years) + pFaceLessTmp.metadata.creationDate = d.getTime() - 60 * 60 * 24 * 29 * 1000; + } else { //all other months must come after a short month with 30 days, so we subtract 31 + pFaceLessTmp.metadata.creationDate = d.getTime() - 60 * 60 * 24 * 31 * 1000; + } pFaceLessTmp.metadata.creationDateOffset = "+02:00"; dir = await DBTestHelper.persistTestDir(directory); diff --git a/test/tmp/sqlite.db-journal b/test/tmp/sqlite.db-journal new file mode 100644 index 00000000..41fef9ee Binary files /dev/null and b/test/tmp/sqlite.db-journal differ