summaryrefslogtreecommitdiffhomepage
path: root/packages/console/core/src/util/date.ts
diff options
context:
space:
mode:
authorFrank <[email protected]>2026-02-24 04:45:39 -0500
committerFrank <[email protected]>2026-02-24 04:45:41 -0500
commitfb6d201ee03d73967c554394742be360e2ff782d (patch)
tree25cbda2e9ec598dfa5a5493f67cb432c5287d624 /packages/console/core/src/util/date.ts
parentcda2af2589ddef9265ca2db379ecd4ab556f6be8 (diff)
downloadopencode-fb6d201ee03d73967c554394742be360e2ff782d.tar.gz
opencode-fb6d201ee03d73967c554394742be360e2ff782d.zip
wip: zen lite
Diffstat (limited to 'packages/console/core/src/util/date.ts')
-rw-r--r--packages/console/core/src/util/date.ts29
1 files changed, 29 insertions, 0 deletions
diff --git a/packages/console/core/src/util/date.ts b/packages/console/core/src/util/date.ts
index 9c1ab12d2..dea9c390e 100644
--- a/packages/console/core/src/util/date.ts
+++ b/packages/console/core/src/util/date.ts
@@ -7,3 +7,32 @@ export function getWeekBounds(date: Date) {
end.setUTCDate(start.getUTCDate() + 7)
return { start, end }
}
+
+export function getMonthlyBounds(now: Date, subscribed: Date) {
+ const day = subscribed.getUTCDate()
+ const hh = subscribed.getUTCHours()
+ const mm = subscribed.getUTCMinutes()
+ const ss = subscribed.getUTCSeconds()
+ const ms = subscribed.getUTCMilliseconds()
+
+ function anchor(year: number, month: number) {
+ const max = new Date(Date.UTC(year, month + 1, 0)).getUTCDate()
+ return new Date(Date.UTC(year, month, Math.min(day, max), hh, mm, ss, ms))
+ }
+
+ function shift(year: number, month: number, delta: number) {
+ const total = year * 12 + month + delta
+ return [Math.floor(total / 12), ((total % 12) + 12) % 12] as const
+ }
+
+ let y = now.getUTCFullYear()
+ let m = now.getUTCMonth()
+ let start = anchor(y, m)
+ if (start > now) {
+ ;[y, m] = shift(y, m, -1)
+ start = anchor(y, m)
+ }
+ const [ny, nm] = shift(y, m, 1)
+ const end = anchor(ny, nm)
+ return { start, end }
+}