mirror of
https://github.com/actualbudget/actual.git
synced 2026-05-06 20:15:33 -05:00
[GH-ISSUE #1062] Scheduled transactions don't handle 29th/30th/31st dates appropriately #26205
Open
opened 2026-04-18 02:16:20 -05:00 by GiteaMirror
·
12 comments
No Branch/Tag Specified
master
claude/hide-default-categories-1cwBZ
matiss/crdt-source-loading
matiss/crdt-protobuf
release/26.5.0
claude/update-issue-template-ykMNn
claude/fix-issue-7667-DPXi3
cursor/formula-feedback-improvements-4223
cursor/resolve-pr-7449-ee11
claude/fix-typescript-build-error-JPtZ5
jfdoming/api-tokens-part-3
jfdoming/api-tokens-part-2
jfdoming/api-tokens-part-1
claude/speed-up-vrt-workflow-ZAyI5
claude/crdt-version-auto-publish-Ph1BH
copilot/add-repository-configs-to-packages
worktree-compressed-drifting-ritchie
worktree-mellow-strolling-dawn
matiss/browser-api
claude/api-consumer-verification-kfz1K
feature/enable-banking
cursor/transaction-table-rewrite-f077
pr-7454
claude/fix-issue-7410-LLLQ4
release/v100.0.0
revert-7350-trim-deps
revert-7220-sankey-report
revert-7242-fix/split-parent-update-corruption
revert-7281-generate-icons
claude/electron-to-tauri-migration-LjBN8
worktree-remotion
release/vv26.4.0-pre
claude/browser-compatible-api-QbhHh
claude/improve-cli-transactions-waTUY
claude/publish-react-native-ios-j8qoT
js-proxy
claude/fix-flaky-ci-job-5gDdz
react-query-rules
react-query-useSchedules
claude/nightly-theme-validation-scan-DzOGD
claude/debug-simplefin-error-ZuKzB
matiss/desktop-client-subpath-imports
claude/fix-simplefin-ssrf-T31gX
claude/release-notes-validation-X7rvR
add-claude-github-actions-1772738270730
cursor/sync-performance-notification-9899
react-query-prefs
matiss/chunked-sync-and-progress-ux
v26.2.1
copilot/sub-pr-6880
fix-react-query-clear-on-close-budget
copilot/sub-pr-6140
feat/auto-note
feat/scoped-bank-sync
cursor/desktop-transactions-react-table-1d0c
fix-exhaustive-deps-App
copilot/fix-find-replace-bug
release/v26.2.0-pre
matiss/browser-tests
mobile-fix-drag-and-drop-across-groups
budget-table-v2
PayeeAutocomplete2
pglite
bugfix/plugins/fix-plugins-sw
feat/plugins/plugins-core-package
prerelease
matiss/unicode-minus-fix
cursor/fix-actual-github-issue-6206-gemini-3-pro-preview-9c37
TransactionFormPage
cursor/implement-mortgage-and-loan-account-type-78ca
tests-update-fill-with-pressSequentially
mobile/link-modal
deps/25.11
cursor/fix-update-vrt-apply-ci-job-dispatch-b324
sync-server-plugins
cursor/propose-patch-for-github-issue-5680-2a18
fix/compiler-preserve-inner-dollar-escapes
cursor/analyze-actual-budget-issue-and-propose-fix-5b70
coderabbitai/docstrings/0c070e5
cursor/add-wip-prefix-and-comment-to-prs-d78d
jfdoming/08-21-auto-focus-on-navigate-in-all-browsers
show-totals-on-mobile-budget-banners
allow-child-transactions-make-transfer
mobile-calculator-keyboard
payee-geolocation
enhance/restore_scroll_position
dm-fix-second-click-on-mobile-new-transaction-2
scrollToLocationBudget
alert-autofix-38
tsconfig-composite
mobile-fix-uncategorized-transactions-on-tracking-budgets
server-budget-handlers
fix-sql-injection-in-cleanup-template
non-chrome-draggable-workaround
mobile-budget-page-swipe-navigation
ts-db-all
stable
dark-theme-with-brand-colors
fix-mobile-delete-group
ts-db-select
UnderKoen/reconcile-context-menu
master-before-server-merge
v25.2.1
ts-runQuery
rename-redux-hooks
UnderKoen/3557-persist-state-in-history
remove-redux-CLOSE_BUDGET
fix-exhaustive-deps-errors-FinancesApp
redux-toolkit-createSlice-backup
accounts-function-component
ts-useSplitsExpanded
loot-core-server-package
useTransactios-in-TransactionEdit
react-aria-input
move-redux-to-desktop-client
QueryState-type
fix-themes-applied-late
mobile-vrts
revert-3295-spendingCardFix
react-aria-button-4
split-payee-on-mobile
twk3/pin-apis-crdt
notes-tag-autocomplete
ts-LoadBackup
dnd-kit
package-upgrades
v26.5.0
v26.4.0
v26.3.0
v26.2.1
v26.2.0
v26.1.0
v25.12.0
v25.11.0
v25.10.0
v25.9.0
v25.8.0
v25.7.1
v25.7.0
v25.6.1
v25.6.0
v25.5.0
v25.4.0
v25.3.1
v25.3.0
v25.2.1
v25.2.0
v25.1.0
v24.12.0
v24.11.0
v24.10.1
v24.10.0
v24.9.0
v24.8.0
v24.7.0
v24.6.0
v24.5.0
v24.4.0
v24.3.0
v24.2.0
v24.1.0
v23.12.0
v23.11.0
v23.10.0
v23.9.0
v23.8.1
v23.8.0
v23.7.2
v23.7.1
v23.7.0
v23.6.0
v23.5.0
v23.4.2
v23.4.1
v23.4.0
v23.3.2
v23.3.0
v23.2.9
v23.2.5
v23.1.12
v22.12.9
Labels
Clear labels
AI generated
API
bank sync
budgeting
bug
can’t replicate
dependencies
docker
documentation
electron
experimental feature
feature
feedback
goal templates
good first issue
help wanted
importers
maintenance
needs info
needs testing
needs triage
needs votes
openid
payees
pull-request
regression
reports
responsive
rules
schedules
server
✨ merged
split transactions
tech debt
theme
transaction import
transaction reconciliation
transactions
translations
upstream
user interface
✅ approved
wontfix
Mirrored from GitHub Pull Request
Milestone
No items
No Milestone
Projects
Clear projects
No project
No Assignees
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: github-starred/actual#26205
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Originally created by @EKCJ on GitHub (May 25, 2023).
Original GitHub issue: https://github.com/actualbudget/actual/issues/1062
Running v23.5.0, when I set up a monthly scheduled transaction starting 31/5 the current behaviour is to not schedule anything for June, because there is no 31st day in June.

I'm sure opinions will differ on whether the best option would be to schedule the transaction for 30/6 or for 1/7, I don't have an opinion on that as long as it gets scheduled somewhere. 🙂
@EKCJ commented on GitHub (May 25, 2023):
Sorry, just realised I had the wrong tab open and have posted this on docs instead of actual-server. Closed this and will post it in the proper place when I have a minute.
@Jackenmen commented on GitHub (May 25, 2023):
As a workaround, you can set it to repeat on last day of the month:

@Kidglove57 commented on GitHub (May 25, 2023):
I have always used the last day of the month option. In my experience, some payees will take it then and others on the 1st.
Only my view but I think the current option is adequate and probably the only reasonable solution.
I believe there is another issue live for the more thorny problem of payments due on a weekend?
@EKCJ commented on GitHub (May 25, 2023):
Many thanks for moving this @j-f1
The last day of month option is useful and does solve the problem for the 31st - however there's still an issue with payments which should always be on the 29th or 30th, even if the month is longer, and only move forward if the month is shorter.
I haven't tried a weekend yet so won't comment on that topic 😅
@rich-howell commented on GitHub (May 25, 2023):
An example would be Feb. If you have something going out on the 30th in January Feb would get ignored and March would pick up again.
The end of the month wouldn't work in the above situation as the 30th isn't the end of the month all the time as @EKCJ pointed out.
This seems like a bug.
@Shazib commented on GitHub (Jun 17, 2023):
The package that Actual uses to create the schedules, appears to implement the ICAL spec RFC5545 for date recurrences,
From some cursory googling, I dont think the spec can actually cope with this and thus neither does the package, i think its expected to simply return invalid dates.
We would have to define i think, our own behaviour of what we want actual to do with these invalid dates, (e.g. always just forward to the next real date) and apply some logic around the returned occurences.
@lukepetrolekas commented on GitHub (Aug 3, 2023):
No, an internal system does not need to be created. The ICalendar spec can absolutely handle the case of "last day of month" and "last workday of month" scenarios.
Also From the ICalendar spec definition of Recurrence Relation
FREQ=MONTHLY;BYDAY=MO,TU,WE,TH,FR;BYSETPOS=-1I would suspect the last day of the month could then be specified as:
FREQ=MONTHLY;BYDAY=MO,TU,WE,TH,FR,SA,SU;BYSETPOS=-1So long as the rest of the RRULE does not specifically select a date such as the 29, 30, or 31st it will work. It should be implemented as a radio button or some form of either/or scenario.
EDIT: Validated online using rrule.js online demo
@Shazib commented on GitHub (Aug 3, 2023):
As I understood it, selecting a specific date is exactly what is wanted? While having it cope with out of bounds dates for certain months
@lukepetrolekas commented on GitHub (Aug 3, 2023):
Ok, I put my foot in my mouth back there, you're correct. I did manage to find this, which looks to be the exact same question.
https://stackoverflow.com/questions/35757778/rrule-for-repeating-monthly-on-the-31st-or-closest-day
It's supported by a newer addition called RSCALE, but not all RRULE libraries support it yet.
@passabilities commented on GitHub (Apr 3, 2025):
where did we land on this? seems to still be an issue as I'm trying to create a schedule for the 30th and it is not automatically picking up February
@salomonsters commented on GitHub (Feb 27, 2026):
This issue occurred for me as well. A recurring payment which is slightly regular (company puts it at 29th or before the weekend) so I can't use end of the month for that - it can be as early as the 27th. So in February my rule didn't trigger.
I worked around it by changing it to 28, manually selecting the transaction and applying the rule, then reverting it back to the 29th. But quite convenient and definitely a bug imho that I would love to see fixed.
@RMcGhee commented on GitHub (Mar 8, 2026):
@passabilities @salomonsters
There's a PR that would fix this: https://github.com/actualbudget/actual/pull/7156
But I think it's very much worth a discussion about whether it's the right path forward.