Skip to content

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

@JBHarris

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
    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