Fix timezone issues with expenses.

I was able to reproduce the problem by setting my system to a timezone, and my `TZ` to a different one. Since it'll default to `UTC`, and to avoid having to pass it around from the system to the client (since we don't really care about the timezone), we simply force the timezone to UTC in the formatting as well, because, again, we don't store timezones or care about them for expenses.

Fixes #88
This commit is contained in:
Bruno Bernardino
2025-08-22 12:55:10 +01:00
parent 4864c283b7
commit eabd888df2
9 changed files with 4 additions and 38 deletions

View File

@@ -1,4 +1,3 @@
TZ="UTC" # optional, forces the server timezone to be UTC, which is the default, anyway
PORT=8000
POSTGRESQL_HOST="postgresql" # docker container name or external hostname/IP

View File

@@ -16,14 +16,10 @@ export default function ListExpenses(
const dateFormatOptions: Intl.DateTimeFormatOptions = {
month: 'short',
day: 'numeric',
timeZone: 'UTC', // Expense dates are stored without timezone info, so we need to force to UTC so it's consistent across db, server, and client
};
// Force timeZone to UTC for the server rendering
if (typeof window === 'undefined') {
dateFormatOptions.timeZone = 'UTC';
}
const dateFormat = new Intl.DateTimeFormat('en-US', dateFormatOptions);
const dateFormat = new Intl.DateTimeFormat('en-GB', dateFormatOptions);
return (
<section class='mx-auto max-w-7xl my-8 mt-12'>

View File

@@ -66,13 +66,9 @@ export default function MainExpenses({ initialBudgets, initialExpenses, initialM
const dateFormatOptions: Intl.DateTimeFormatOptions = {
year: 'numeric',
month: 'long',
timeZone: 'UTC', // Expense dates are stored without timezone info, so we need to force to UTC so it's consistent across db, server, and client
};
// Force timeZone to UTC for the server rendering
if (typeof window === 'undefined') {
dateFormatOptions.timeZone = 'UTC';
}
const dateFormat = new Intl.DateTimeFormat('en-GB', dateFormatOptions);
const thisMonth = new Date().toISOString().substring(0, 7);

View File

@@ -53,11 +53,6 @@ export default function ListFiles(
minute: '2-digit',
};
// Force timeZone to UTC for the server rendering
if (typeof window === 'undefined') {
dateFormatOptions.timeZone = 'UTC';
}
const dateFormat = new Intl.DateTimeFormat('en-GB', dateFormatOptions);
let routePath = fileShareId ? `file-share/${fileShareId}` : 'files';

View File

@@ -35,11 +35,6 @@ export default function ListFiles(
minute: '2-digit',
};
// Force timeZone to UTC for the server rendering
if (typeof window === 'undefined') {
dateFormatOptions.timeZone = 'UTC';
}
const dateFormat = new Intl.DateTimeFormat('en-GB', dateFormatOptions);
const routePath = isShowingNotes ? 'notes' : 'files';

View File

@@ -21,11 +21,6 @@ export default function SearchFiles({}: SearchFilesProps) {
minute: '2-digit',
};
// Force timeZone to UTC for the server rendering
if (typeof window === 'undefined') {
dateFormatOptions.timeZone = 'UTC';
}
const dateFormat = new Intl.DateTimeFormat('en-GB', dateFormatOptions);
function searchFiles(searchTerm: string) {

View File

@@ -1,6 +1,6 @@
services:
website:
image: ghcr.io/bewcloud/bewcloud:v2.4.1
image: ghcr.io/bewcloud/bewcloud:v2.4.2
restart: always
ports:
- 127.0.0.1:8000:8000

View File

@@ -24,11 +24,6 @@ export default function Articles({ initialArticles }: ArticlesProps) {
const dateFormatOptions: Intl.DateTimeFormatOptions = { dateStyle: 'medium' };
// Force timeZone to UTC for the server rendering
if (typeof window === 'undefined') {
dateFormatOptions.timeZone = 'UTC';
}
const dateFormat = new Intl.DateTimeFormat('en-GB', dateFormatOptions);
async function refreshArticles() {

View File

@@ -59,11 +59,6 @@ export default function Feeds({ initialFeeds }: FeedsProps) {
const dateFormatOptions: Intl.DateTimeFormatOptions = { dateStyle: 'medium', timeStyle: 'short' };
// Force timeZone to UTC for the server rendering
if (typeof window === 'undefined') {
dateFormatOptions.timeZone = 'UTC';
}
const dateFormat = new Intl.DateTimeFormat('en-GB', dateFormatOptions);
async function onClickAddFeed() {