Skip to content

[FEAT] Clarify timezone configuration (TZ vs APP_TIMEZONE vs DISPLAY_TIMEZONE) in README #77

Description

@JBHarris

Is this a new feature request?

  • I have searched the existing issues

Wanted change

Improve the README's documentation around timezone configuration. Speedtest-tracker reads three separate timezone environment variables, and the interaction between them isn't obvious from the current README:

  1. TZ — container OS timezone (cron, system logs)
  2. APP_TIMEZONE — Laravel's internal timezone (config/app.phpenv('APP_TIMEZONE', 'UTC'))
  3. DISPLAY_TIMEZONE — timezone shown in the web UI (config/app.phpenv('DISPLAY_TIMEZONE', 'UTC'))

Currently:

  • APP_TIMEZONE isn't listed in readme-vars.yml at all.
  • DISPLAY_TIMEZONE is listed as optional with the description "Timezone for the UI." and no guidance.

Users following the standard LSIO pattern of only setting TZ end up with a UI that displays UTC times regardless of their TZ value, which is a common source of confusion.

Reason for change

This trips up users (myself included) who reasonably expect TZ alone to control displayed times, as it does in most other LSIO images. A short note in Application Setup that all three should generally be set to the same value would save a lot of head-scratching and forum/Discord traffic.

Proposed code change

A small, documentation-only change to readme-vars.yml:

  • Add APP_TIMEZONE to opt_param_env_vars.
  • Expand the DISPLAY_TIMEZONE description to recommend matching TZ.
  • Add a "Timezone configuration" subsection to app_setup_block explaining the three variables and recommending they all be set to the same value.
--- a/readme-vars.yml
+++ b/readme-vars.yml
@@ -33,13 +33,24 @@ opt_param_env_vars:
   - {env_var: "DB_DATABASE", env_value: "", desc: "Database name (postgres/mysql)."}
   - {env_var: "DB_USERNAME", env_value: "", desc: "Database username (postgres/mysql)."}
   - {env_var: "DB_PASSWORD", env_value: "", desc: "Database password (postgres/mysql)."}
-  - {env_var: "DISPLAY_TIMEZONE", env_value: "Etc/UTC", desc: "Timezone for the UI."}
+  - {env_var: "APP_TIMEZONE", env_value: "Etc/UTC", desc: "Timezone Laravel uses internally for scheduling and stored timestamps. Recommended to match `TZ`."}
+  - {env_var: "DISPLAY_TIMEZONE", env_value: "Etc/UTC", desc: "Timezone shown in the web UI. Recommended to match `TZ` so displayed times line up with the container clock."}
   - {env_var: "PRUNE_RESULTS_OLDER_THAN", env_value: "0", desc: "Days to keep test results."}
 # application setup block
 app_setup_block_enabled: true
 app_setup_block: |
   Access the web UI at `<your-ip>:80`, the default credentials are admin@example.com / password

+  ### Timezone configuration
+
+  Speedtest-tracker reads three separate timezone variables and they each control a different layer:
+
+  * `TZ` sets the container OS timezone, used by cron and system logs.
+  * `APP_TIMEZONE` sets the timezone Laravel uses internally for scheduling and stored timestamps.
+  * `DISPLAY_TIMEZONE` sets the timezone shown in the web UI.
+
+  Setting only `TZ` (the common pattern with other LinuxServer.io images) will leave the application and UI on UTC. For consistent behaviour set all three to the same value, e.g. `Europe/London`.
+
   For more information check out the [project documentation](https://docs.speedtest-tracker.dev/).

I have this change prepared locally on a branch. Happy to open a PR if you'd like — just wanted to check first since CONTRIBUTING.md asks for an issue rather than a PR for small doc fixes. Let me know which you'd prefer.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    Status
    Issues

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions