From 84928e6371988c302d5fd13504d324df00195c1d Mon Sep 17 00:00:00 2001 From: gras Date: Sun, 31 Mar 2024 19:15:59 +0200 Subject: [PATCH] Change how months are subtracted in SearchManager --- src/backend/model/database/SearchManager.ts | 2 +- src/common/Utils.ts | 13 +++++++++++++ test/tmp/sqlite.db-journal | Bin 8720 -> 0 bytes 3 files changed, 14 insertions(+), 1 deletion(-) delete mode 100644 test/tmp/sqlite.db-journal diff --git a/src/backend/model/database/SearchManager.ts b/src/backend/model/database/SearchManager.ts index 75010fdb..9977ca65 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.setUTCMonth(to.getUTCMonth() - tq.agoNumber); + to.setTime(Utils.addMonthToDate(to, -1 * tq.agoNumber).getTime()); break; case DatePatternFrequency.years_ago: diff --git a/src/common/Utils.ts b/src/common/Utils.ts index a9a7a862..a47898ce 100644 --- a/src/common/Utils.ts +++ b/src/common/Utils.ts @@ -220,6 +220,19 @@ 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) { + let 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/tmp/sqlite.db-journal b/test/tmp/sqlite.db-journal deleted file mode 100644 index 41fef9eebaebbae9c91a7f46412db09bd82d3d74..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8720 zcmeHLOK;mo5Edg#vST}To@!9ECFB~l;5c1Am%OxfZ3PhG$gwR0$tA*)yX&yf!=WfQ z28tANilYCiK!N^*0=*SIWmTn%UT+izw*u9(T3zg|5t ze}vI$CUXhCmd_38*}KfZM~kpJVd?J-ywg|8K*~VMK*~VMK*~VMK*~VMK*~VMK*~VM zK+3>7$H0t`%?KZlp8E&~dpnNDMBZ^*#1j>G0wf5TFGLZRorMFQ3uQipWAJdO4#x}} z@!8*I9~OSj?-hQ?{gRuV z>1BV&=(ET^E&>x(PGpg4c7J?@3bL> zN5%fF8--#O3w_hSw7UJMA=%87bqNt}Pz!U)Wn|cfq1)OqbGw~(=nZC4(NrRfn$;%-eWO^j0#*G7gaEtSRo&Fe#8H~^-YHd3)IF{V+#$Eji% z1RJJ_CI-9_2bLV+4ZwWPhPalm4RLJ*xER$`U6&~3wrOyK5koQ%lBpt3#C1K6D>=d& za5+9z_pTO-7z=0XenKWrI`PMABP8|BFLx?a(gL%HPTONg%oQK*S08NdKNjy-9*diY z_1$U>f;_0y>SApdj>DauJ7Q@}SKt-04UqtsF=P3~GEloJ^xqGtMW(K3j9J*S45CYt zjJd9=$kz1Hf}p6~)2netlN~QG>bnmr&nNOsy;3Nyt_t5>Akx1kJl)bn+QOlNrTr(i z+N8xw;t6r>r^F4@Xm@&TFV2&=UAeb;xKkI`P#MT}y7$OQr{_Y?mqe@6X)@9dqC~Fk zlGbsP?Xx3j-%twfh+Dh0gZlnv74ld*+yf231~qjHXy>MEG95!T6Nw>BDv5`+>fT`m zNb`Z0%Xn#;_=K5jNa4|Pe_;_4z9IBK4H8Z%v$@6y^ec2 z60$4tq$fKMlO7G>OAc`%bHD{i&g{Yv&L;sJTQUF$0!-X6ZLD(5B$~`Qk)p8{<8YFl zr@`@_`cUShP%tR6Vr!tuRKtW(#U>!rTq1T9%0e7UvU4(&VRprS{_+sYO27({5n?*E z2{6GWgfX^s3p7whQ7H3qD9O&rQ2g$ExiecRZfpqO-}hxMI#qN$H=24RZc+27>EBYP z9ur90q!w1Nh~sfPjERA;_P}$RS|E*L)zDQ;Wo&W7z>Fh9)+xhs zR4pK!&sDkn`CPtuu#vQ7iKeR&Yq-lV3Q(6TLjQxHE+q>oSVNL5*_MW6_<%cxN(}>X zr^!aTF&i(*WWQlahP(%556%fE-`8zR3+?+zwz+1888#k~LFSBm|kEvZb0>wL&oRaTv*d6JhvW*{{zOiYqI^ zS;z0n&;+5=+{IoDS>A3NQsUnO{Vsz_^Ak1h$~8$ZhdVD!;<(rYd--8DUtC`o9{Y