mirror of
https://github.com/immich-app/immich.git
synced 2026-07-25 14:00:45 +03:00
Date display wrong, homepage timeline is using UTC timezone however the photo time is correct in info page #3554
Closed
opened 2026-02-05 08:56:12 +03:00 by OVERLORD
·
39 comments
No Branch/Tag Specified
main
chore/translations
fix/partner-ownership-contention
renovate/machine-learning
renovate/pypi-pillow-vulnerability
renovate/pypi-pydantic-settings-vulnerability
renovate/java-25.x
renovate/mobile
chore/harden-mobile-openapi-gen
renovate/java-21.x
fix/min-faces
refactor/asset-update
feat/merge-people-mobile
chore/face-cluster-abstraction
refactor/search-v3/pr-2a
fcast
fix/android-local-album-date
fix/24545-sync-retry-cx
fix/android-locked-folder-delete
make-sure-memory-widget-render
chore/freezed-example
fix/clamp-local-date-time-to-valid-value
fix/datetime-max-limit
fix/viewer-long-image-aspect
feat/native-core
feat/yucca-integration
refactor/mobile-actions
fix/ws-reconnect-battery
renovate/sharp
renovate/pigeon-27.x
refactor/auto-trash-sync
feat/release-source-branch
refactor/session-repository
fix/library-map-live-bounds-updates
renovate/permission_handler-12.x
renovate/node-24.x
fix/mobile-scroll-velocity-placeholders
fix/library-map-loading-flash
agg23/appbar-experiments
renovate/pep621-lock-file-maintenance-machine-learning
refactor/undo-actions
refactor/actions
feat/restore-action
feat/delete-action
fix/29853-thumbnail-decode-size
bugfix/live-photo-stuck
feature/load-previews
chore/pub-upgrade
custom-app-logo
fix/failed-sync-blocks-resume
feat/ml-hwaccel-testing
feat/workflow-logs
feat/server-chunked-uploads
feat/upload-action
fix-29727
feat/download-tag-action
feat/share-action
feat/album-actions
fix/android-cr3-save
feat/browser-profile-action
feat/cast-slideshow-action
feat/locked-folder-action
fix/unauthorized-memory-creation
feat/context-actions
refactor/action-class
feat/memories-view
refactor/asset-action-filter
feat/archive-action
feat/stack-action
feat/mobile-hls-player
refactor/stack-actions
feat/workflow-asset-tags
fix/timeline-drag-select-stops
fix/featured-photo-thumbnail-cache
fix/album-timeline-date-ordering
chore/album-remove-assets
feat/partner-table-permissions
fix/ocr-after-edit
fix/re-enable-pruning
refactor/delete-restore-actions
apk-build-deployment
edit-photo-stacking
fix/mise-lockfile
feat/web-hls-hover
refactor/store-cleanup
fix/hash-mismatch
refactor/app-metadata
refactor/advanced-settings
refactor/current-user
fix/dedupe-integrity-missing-paths
chore/albums-select
fix/fdroid-meta
refactor/per-asset-backup-flag
fix/av1-threads
fix/pass-secrets
fix/download-progress-stuck
fix/negative-backup-remainder
feat/map-asset-number
test-bump-prerelease
fix/handle-unlinking-motion-photos
fix/date-range-formatting
fix/mobile-album-action-msg
asset-add-to-album-trigger
refactor/face-editor-decoupling
feat/zoom-aware-face-editing
refactor/adaptive-image-dimensions
fix-face-editor-video-preview
fix-stack-face-tag-selection
fix/face-boxes-edit-panel
workflow-webhook-step
feat/hero_view_transitions
fix/map-sidepanel-queries
feat/dart-openapi-generator
claude/share-quality-5d7Gn
drag-drop-ghost-target
refactor/workflow-page
refactor/mobile-upload
fix-scroll-flicker-2
update-mise-lock-file
feat/kysely-0.29
release-candidate-flow-1
fix/mobile-22522-sqlite-2067
fix/job-lock
release-candidate-flow-3
release-candidate-flow-2
show-in-timeline-toggle
fix/mise-windows
plan-local-image-display
fix/remote-thumbnail-fallback
chore/riverpod-update
album-order-per-user
fix/web-timeline-dom-node-retention
chore/svelte-enable-state-referenced-locally
feat/favorite-albums
feat/patch-release-from-branch
fix/oauth-linking
feat/timeline_scroll_buffer
panorama-face-overlay
push-txxyuusptoru
push-zpwsovysllvn
chore/queue-endpoint-migration
fix/remove-from-album
chore/thumbnail-histogram
fix/video-thumbnail-bindthis-regression
fix/scrubber-drag-edge-cases
fix/timeline_layout_row_height
refactor-cancellable-task
uhthomas/fix-mobile-use-timer
uhthomas/fix-mobile-video-controls-key
uhthomas/chore-mobile-search-declarative
owner-role-album-user
feat/livephoto-editing
favorite-albums
uhthomas/fix-mobile-isolate-auth
fix/library-watcher-excludes
chore/library-e2e-to-medium
push-ynllunsvrpxy
fix/dont-delete-offline-library-files
push-zvwwxmvkrspv
push-kywsnvvkwzts
push-xxnxokokzrou
push-voozlrlkxsnu
view-in-timeline-transition
push-uymvmlknxpmx
push-qslzsplnusoz
fix/mobile-video-stall
uhthomas/draft-mobile-image-cache-cancel
push-yquostpqnkxp
feat/vitest-4
claude/offload-icloud-hashing-bI3GZ
midzelis/wip
uhthomas/fix-server-fsync-all
feat/mobile-widget-shared-client
push-lnyuzsutzkqq
push-vqqqxxvkunru
push-wvnmqoswptww
push-nwxlpmyzkyrl
fix/map-webgl-error
fix/mobile-player-fit
feat/panorama-tiles
csp-policy
push-rsywxvptwxuv
refactor/restores-file-interceptor
postgres-socketio
claude/auto-screenshot-web-changes-Y7efI
visual-review/pr-26535
push-lvyturrtwkrq
feat/library-offline-count
fix/mobile-video-aspect-ratio
uhthomas/fix-mobile-search-results
uhthomas/feat-sort-smart-search
uhthomas/chore-mobile-maplibre
uhthomas/mobile-fix-asset-details-album-pop
feat/crawl-wrapper
push-skvzqoozqkpl
feat/edit-filters
feat/pg-queue
refactor/asset-upload
better-project-structure
uhthomas/mobile-feat-asset-viewer-details
fix/ml-rocm-build
feat/asset-file-apis
feature/bottom-buttons-order
sqlite_thumbs
fix-keep-correct-ios-shared-album-asset
push-vpxwmwwxwnvw
fix-migration-width-height
shared-deep-link-handler
feat/thumbnail-native-clients
feat/platform-clients
fix/foreground-cloud-sync
filter-by-person
refactor/sidebar
fix/merged-edited-assets
feat/create-job-with-dto
feat/ios-fastlane-match
match-signing
fix-update-time-update-timeline
feat/modal-routes
feature/mobile-view-asset-owner
feat/system-settings
feature/show-activity-count
feat/location-favorites
feature/rearrange-buttons-2
fix/download-storage-template
chore/originals-in-asset-files
ben/tree-a11y
new-search-filter-ui
refactor/expectSelectedReadonly
refactor/mobile-grdb
feat/mobile-native-local-sync
refactor/timeline_ops
fix/scrubber_end
refactor/virtualsegment
refactor/rename_daymonth_groups
fix-remote-sync-clean-up
debug/cf-chunked-uploads
feat/search-filter-album/web
feat/session-permissions
feat/mobile-dynamic-thumbnails
refactor/extract_photostream
refactor/rename_load_api
refactor/timeline2
refactor/timeline3
feat-no-thumbhash-cache
feat/mobile-hdr-images
feat/beta-background-upload
fix/beta-timeline-memories-setting
fix/failed-uploads-not-removed
feat/groups
drift-map-page
feat/add-to-album-action
track-livephotos
feat/maintenance-worker
refactor/server-side-dedupe
feat/integrity-checks
dev/recognition-eval
lighter_buckets_test
perf/postgres-queue
tmp/demo-snapshot-preview
fix/server-migration-file-extension
rknn-toolkit-lite2
feature/Add-rocm-support-for-machine-learning
chore/async-hash-file
feat/shared-link-view-count
feat/graphql
no-video-player
fix/server-qsv-output-format
chore/server-geodata-tweaks
mobile/native-video-player-no-hero
feat/local-tileserver
feat/ml-armnn-conversion
chore/handle-output_dims
feat/capacitor-mobile-app-poc
feat/server-nvenc-hw-decoding
web/automation-ui
object-storage
ml/tflite
feat/ml-export-cli
v3.0.3
v3.0.2
v3.0.1
v3.0.0
v3.0.0-rc.4
v3.0.0-rc.3
v3.0.0-rc.2
v3.0.0-rc.1
v3.0.0-rc.0
v2.7.5
v2.7.4
v2.7.3
v2.7.2
v2.7.1
v2.7.0
v2.6.3
v2.6.2
v2.6.1
v2.6.0
v2.5.6
v2.5.5
v2.5.4
v2.5.3
v2.5.2
v2.5.1
v2.5.0
v2.4.1
v2.4.0
v2.3.1
v2.3.0
v2.2.3
v2.2.2
v2.2.1
v2.2.0
v2.1.0
v2.0.1
v2.0.0
v1.144.1
v1.144.0
v1.143.1
v1.143.0
v1.142.1
v1.142.0
v1.141.1
v1.141.0
v1.140.1
v1.140.0
v1.139.4
v1.139.3
v1.139.2
v1.139.1
v1.139.0
v1.138.1
v1.138.0
v1.137.3
v1.137.2
v1.137.1
v1.137.0
v1.136.0
v1.135.3
v1.135.2
v1.135.1
v1.135.0
v1.134.0
v1.133.1
v1.133.0
v1.132.3
v1.132.2
v1.132.1
v1.132.0
v1.131.3
v1.131.2
v1.131.1
v1.131.0
v1.130.3
v1.130.2
v1.130.1
v1.130.0
v1.129.0
v1.128.0
v1.127.0
v1.126.1
v1.126.0
v1.125.7
v1.125.6
v1.125.5
v1.125.4
v1.125.3
v1.125.2
v1.125.1
v1.125.0
v1.124.2
v1.124.1
v1.124.0
v1.123.0
v1.122.3
v1.122.2
v1.122.1
v1.122.0
v1.121.0
v1.120.2
v1.120.1
v1.120.0
v1.119.1
v1.119.0
v1.118.2
v1.118.1
v1.118.0
v1.117.0
v1.116.2
v1.116.1
v1.116.0
v1.115.0
v1.114.0
v1.113.1
v1.113.0
v1.112.1
v1.112.0
v1.111.0
v1.110.0
v1.109.2
v1.109.1
v1.109.0
v1.108.0
v1.107.2
v1.107.1
v1.107.0
v1.106.4
v1.106.3
v1.106.2
v1.106.1
v1.106.0
v1.105.1
v1.105.0
v1.104.0
v1.103.1
v1.103.0
v1.102.3
v1.102.2
v1.102.1
v1.102.0
v1.101.0
v1.100.0
v1.99.0
v1.98.2
v1.98.1
v1.98.0
v1.97.0
v1.96.0
v1.95.1
v1.95.0
v1.94.1
v1.94.0
v1.93.3
v1.93.2
v1.93.1
v1.93.0
v1.92.1
v1.92.0
v1.91.4
v1.91.3
v1.91.2
v1.91.1
v1.91.0
v1.90.2
v1.90.1
v1.90.0
v1.89.0
v1.88.2
v1.88.1
v1.88.0
v1.87.0
v1.86.0
v1.85.0
v1.84.0
v1.83.0
v1.82.1
v1.82.0
v1.81.1
v1.81.0
v1.80.0
v1.79.1
v1.79.0
v1.78.1
v1.78.0
v1.77.0
v1.76.1
v1.76.0
v1.75.2
v1.75.1
v1.75.0
v1.74.0
v1.73.0
v1.72.2
v1.72.1
v1.72.0
v1.71.0
v1.70.0
v1.69.0
v1.68.0
v1.67.2
v1.67.1
v1.67.0
v1.66.1
v1.66.0
v1.65.0
v1.64.0
v1.63.2
v1.63.1
v1.63.0
v1.62.1
v1.62.0
v1.61.0
v1.60.0
v1.59.1
v1.59.0
v1.58.0
v1.57.1
v1.57.0
v1.56.2
v1.56.1
v1.56.0
v1.55.1
v1.55.0
v1.54.1
v1.54.0
v1.53.0
v1.52.1
v1.52.0
v1.51.2
v1.51.1
v1.51.0
v1.50.1
v1.50.0
v1.49.0
v1.48.1
v1.48.0
v1.47.3
v1.47.2
v1.47.1
v1.47.0
v1.46.1
v1.46.0
v1.45.0
v1.44.0
v1.43.1
v1.43.0
v1.42.0_65-dev
v1.41.1_64-dev
v1.41.0_64-dev
v1.40.1_63-dev
v1.40.0_63-dev
v1.39.0_61-dev
v1.38.2_60-dev
v1.38.1_60-dev
v1.38.0_60-dev
v1.37.0_58-dev
v1.36.2_56-dev
v1.36.1_55-dev
v1.36.0_55-dev
v1.35.0_54-dev
v1.34.0_53-dev
v1.33.1_52-dev
v1.33.0_52-dev
v1.32.1_51-dev
v1.32.0_50-dev
v1.31.1_49-dev
v1.31.0_49-dev
v1.30.2_48-dev
v1.30.0_46-dev
v1.29.6_45-dev
v1.29.6_44-dev
v1.29.5_44-dev
v1.29.4_44-dev
v1.29.3_43-dev
v1.29.2_43-dev
v1.29.1_43-dev
v1.29.0_42-dev
v1.28.4_41-dev
v1.28.4_42-dev
v1.28.3_41-dev
v1.28.2_40-dev
v1.28.1_39-dev
v1.28.0_38-dev
v1.27.0_37-dev
v1.26.0_36-dev
v1.25.0_35-dev
v1.24.0_34-dev
v1.23.0_33-dev
v1.22.0_32-dev
v1.21.1_31-dev
v1.21.0_31-dev
v1.20.3_30-dev
v1.20.2_30-dev
v1.20.1_30-dev
v1.20.0_30-dev
v1.19.1_29-dev
v1.19.0_29-dev
v1.18.0_27-dev
v1.17.0_25-dev
v1.16.0_23-dev
v1.15.1_21-dev
v1.15.0_21-dev
v1.14.0_21-dev
v1.13.0_20-dev
v1.12.0_18-dev
v1.11.0_17-dev
v1.10.0_15-dev
v1.9.1_14-dev
v1.9.0_13-dev
v1.8.0_12-dev
v1.7.0_11-dev
v1.6.0_10-dev
v1.5.1+9-dev
v1.5.0+8-dev
v1.4.0+7-dev
v1.4.0+6-dev
v1.4.0-dev
v1.3.0-dev
v1.3.1-dev
v0.6-dev
v0.5-dev
v0.4-dev
v0.3-dev
v0.2-dev
first-android-release
Labels
Clear labels
accessibility
changelog:enhancement
changelog:security
changelog:skip
changelog:translation
cli
date-time
dependencies
documentation
external-library
format
good first issue
mobile-beta
mobile-beta
mobile-beta
needs-answer
nice to have
pull-request
sharing
tech-debt
📱mobile
🖥️web
🗄️server
🧠machine-learning
Mirrored from GitHub Pull Request
No Label
Milestone
No items
No Milestone
Projects
Clear projects
No project
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: immich-app/immich#3554
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 @MFYDev on GitHub (Jun 17, 2024).
The bug
Hello, just upgraded to the latest v1.106.4, I just uploaded a photo which was taken on GMT-4 on June 16 however on the homepage this picture is displaying under tomorrow's date which is Jun 17, in the photo info page it is correct
The OS that Immich Server is running on
ubuntu 22.04
Version of Immich Server
1.106.4
Version of Immich Mobile App
1.106.4
Platform with the issue
Your docker-compose.yml content
Your .env content
Reproduction steps
Relevant log output
No response
Additional information
No response
@MFYDev commented on GitHub (Jun 17, 2024):
photo info is correct
However it is in tomorrow's date
@bo0tzz commented on GitHub (Jun 17, 2024):
Can you try a force refresh/clearing your browser cache?
@MFYDev commented on GitHub (Jun 17, 2024):
Hi, thank you for the response, I tried both incognito and normal model with cache cleared, still the same which is really weird
@snuq commented on GitHub (Jun 17, 2024):
Just installed Immich and running into the same problem (images are displayed in different 'day folder' than they should be).
In my case tho, the displayed dates are weird as well - for instance, one photo shows "Nov 23, 2023 Thu, 7:18 AM GMT-08:00", the photo was taken at 3:18 pm PST, and this is the time that the file modified date displays.
The photo's original date and time exif data shows: 2023:11:23 15:18:57
so... it thinks that the exif/modified date is gmt and its subtracting 8 hours from that to get what it thinks is my time?
Also, some files that are in the wrong 'date folder' are showing in UTC timezone when i view the info. These files appear to be mostly videos, and dont have any exif data. like the other files, the date and time are displayed correctly when viewing the files in a file explorer.
@snuq commented on GitHub (Jul 9, 2024):
First off, my timezone is PDT, all photos were taken in that timezone, and the server is in that timezone. GPS was disabled on my phone for all the photos and videos that were taken (i only enable it when im needing navigation).
First example:
I have an image dated Nov 23, 2023, 4:09 PM GMT-08:00, it shows this correctly in the info pane.
In the photo timeline, this image is placed in Nov 24, 2023.
Another image taken on same device from the same day - Nov 23, 2023 at 3:52 PM GMT-08:00 is in the correct day on the timeline.
Second example:
Even worse are the videos, I have one actually taken on December 30th, 2023 at 8:47PM (as indicated by the date modified in the file) which shows in the timeline under December 31st, it thinks was taken at "Dec 31, 2023, 4:47 AM UTC" in the photo info.
In the Immich android app, this shows up in the correct date in the timeline, but when I check the image date it shows the (incorrect) decmber 31st at 4:47am.
One of the things I tried to make this work better was setting the 'TZ' environment variable to my timezone... but somehow this makes it WORSE in some ways... it seems to have corrected the time display of images in the info pane (tho videos are still incorrect), but those images are now displayed in the wrong date on the timeline when they were correctly displayed before...
I also ran into another bug that appears related - when I tried to back up some photos from the android app, they ended up in folders with the incorrect date (in the same way as the timeline shows the incorrect date).
UPDATE: After changing the timezone on my server with the TZ environmental variable, the android app backup folders are correct.
@chodthewacko commented on GitHub (Jul 12, 2024):
just encountered this as well. 1.107.2
Like snuq, I am in new york. many ipad videos are showing, on the web page, in UTC, causing any photos taken after 8pm to appear on the next day in the timeline.
On the android app, the videos appear in EST.
What really threw me off is that the arrow keys/cursor keys on the keyboard follow "EST order".
So if you have pic1, pic2, vid3, pic4, vid5 in chronological order,
on the web page you see:
July 5:
vid3 -> vid5
July 4:
pic1, pic2, pic4
which would make you think, if you hit 'right' when viewing vid3, you should go to vid5.
You don't - it goes to pic4.
I originally hit right arrow 5 times expecing to go to the picture 5 "spaces" to the right, and it didn't.
@MFYDev commented on GitHub (Aug 15, 2024):
same issue is still happening now even if I set the TZ in the .env in the latest version today
@Thinkscape commented on GitHub (Aug 16, 2024):
Example
16 Aug 2024, 9:52 GMT+10:00.15 Aug 2024 Thu, 09:12 GMT+10:00TZ=Australia/Sydney(which is GMT+10:00)TodayMetadata
Metadata for a file with yesterday's date
How the file shows up in the UI
Browser locale
@tjhorner commented on GitHub (Aug 18, 2024):
I am experiencing this as well.
Version info
Immich
v1.112.1
ExifTool
12.91
Node.js
v20.16.0
Libvips
8.15.2
ImageMagick
7.1.1-24
FFmpeg
6.0.1-6
Repository
immich-app/immich
Source
v1.112.1@f7bfde6a3
Build
10396590839
Build Image
v1.112.1
The below screenshot was taken at August 17, 2024 at 8:33 PM Pacific Time. All of these photos were taken/uploaded on the same day in Pacific Time.
Browser date: Sat Aug 17 2024 20:33:34 GMT-0700 (Pacific Daylight Time)
TZ=America/Los_Angelesis set on all containers.Metadata for the first image in "Yesterday"
Metadata for the photo in "Sun, Aug 18"
The correct time and time zone appears for each of the photos when viewing them individually:
PS: Immich is really great software. Very impressed by the breadth of features and how well it matches competitors like Google Photos. I just purchased an individual license to help keep it alive 😄
@tjhorner commented on GitHub (Aug 18, 2024):
Ok, I did some investigation and it appears to be related to how
localDateTimeis calculated. It depends on if the EXIF data has a timezone offset attached to it.Here's the problem area:
5ef9a8ff8d/server/src/services/metadata.service.ts (L229-L242)I haven't verified this by stepping through it in a debugger, but here's what I think is happening. This snippet is intended to apply the time zone from the EXIF data to the
dateTimeOriginal(assuming it is a UTC timestamp) in order to get the timestamp in the time zone that it was taken.However, it looks like this step is unnecessary since the
dateTimeOriginalappears already adjusted to be in the correct time zone (by exiftool, I think?). As an example, the photo taken on August 17, 2024 at 8:02 PM Pacific Time that I posted above has the followingdateTimeOriginal:2024-08-18T03:02:29.732Z. This is the correct UTC timestamp, already adjusted for the time zone it was taken in:However, since the EXIF data also specifies a time zone of
UTC-7, the metadata processing job applies this offset to thedateTimeOriginalin order to get thelocalDateTime(which is2024-08-17T20:02:29.732Z). But since the offset was already accounted for, instead of a timestamp at 8:02 PM PDT, it is a timestamp at 8:02 PM UTC:I think the assumption is made that all dates are TZ-less, since the client code for rendering the photos in the timeline specifies UTC as the timezone for
localDateTimerather than obtaining it from the ISO8601 string (this is also why the UTC dates are displayed as headers instead of your local time zone's):5ef9a8ff8d/web/src/lib/utils/timeline-util.ts (L7-L8)But since the column type in the database is
TIMESTAMP WITH TIME ZONE, the timezone metadata is getting stored alongside the timestamp, and it appears to assume UTC for all dates, as indicated by the ISO8601 timestamps specifying no offset.I'll try to get a local dev instance spun up and fix the issue. Hopefully maybe a PR if I am able to!
@tjhorner commented on GitHub (Aug 18, 2024):
I can confirm that omitting
zone: 'UTC'from thelocalDateTimeparsing and removing the snippet which incorrectly offsets thedateTimeOriginalfixes the issue; both photos now show up as being taken today:I'll make a PR shortly.
@etnoy commented on GitHub (Aug 18, 2024):
Localdatetime is used to put it into the correct time bin. It is intended to be the local time for where the photo is taken, so the utc conversation is intended.
@etnoy commented on GitHub (Aug 18, 2024):
See #4072 for an explanation
@etnoy commented on GitHub (Aug 18, 2024):
Time zone logic is very messy and is filled with edge cases. Sorry if you already mentioned this, but what camera took the photos, and were they processed in some way? The TZ variable is a bit of a hack where we tell immich the default time zone to apply to photos that lack the information, usually DSLR photos. Modern phone cameras usually have this information correct. The TZ hack fails if you go on a trip to another time zone. The real fix is usually to edit the TZ information of the photos with exiftool. Maybe I should make a guide...
It seems like localdatetime stores the wrong date of the photos, in my experience this usually means that the issue is within the metadata of the photos, but I could be wrong.
Fun fact, Google photos has terrible support for DSLR photos because they just ignore this issue altogether. If I upload my d700 photos to Google photos and have phone pictures taken of the same event, they will be offset by several hours! Each photo must be manually corrected in the web ui.
@tjhorner commented on GitHub (Aug 18, 2024):
The photos are from an iPhone 15 Pro, directly from the Immich mobile app with no processing. This comment includes the full JSON metadata of these photos (at the bottom of the comment) if you want to take a look. The
dateTimeOriginalstores the correct UTC timestamp of when the photo was taken, taking into account the time zone offset. Immich is performing an unnecessary additional offset.The conversion to UTC in the frontend should not be happening at all; this will make all date formatting happen relative to the current UTC time rather than the user's local time zone. The timestamps are ISO8601 so there is no need to specify the time zone.@etnoy commented on GitHub (Aug 18, 2024):
That does sound strange. I'm still on vacation for another week or two so I'm only on my phone for now. I think we'll need to add some e2e tests for TZ logic, that infrastructure was not available to us when we made #4072 .
Any change to the logic needs extensive testing to make sure all the edge cases are treated correctly.
@etnoy commented on GitHub (Aug 18, 2024):
I'm curious. Are the photos taken with the iphone with gps on or off?
@tjhorner commented on GitHub (Aug 18, 2024):
On. The second one was taken with Telegram's in-app camera, which is why much of the EXIF information is missing. However, the
dateTimeOriginalis still correct despite the time zone not being present.@etnoy commented on GitHub (Aug 18, 2024):
Ok. As another test, what happens if you unset the TZ variable, rerun metadata extraction for that image and check the info pane?
I want to know if it changes. If it does, the photo itself doesn't contain TZ data, it's only assumed from the default time zone set by the TZ variable.
@tjhorner commented on GitHub (Aug 18, 2024):
Neither photo changes timestamp in the info pane with TZ unset and metadata extraction re-run. Date, time, and time zone are all correct.
@etnoy commented on GitHub (Aug 18, 2024):
Thanks for verifying
@tjhorner commented on GitHub (Aug 18, 2024):
It appears
exiftool-vendoredalready does some processing on the rawDateTimeOriginaltag to return a TZ-corrected timestamp, which is why we are seeing a correctdateTimeOriginal, and why Immich's processing of the same tag is redundant:d6fa63469a/src/ExifToolOptions.ts (L156-L168)@tjhorner commented on GitHub (Aug 18, 2024):
You mentioned that DSLR photos will often have incorrect EXIF data and will differ by hours from a phone's photo taken at the same time. Do you have examples of those on hand?
@tjhorner commented on GitHub (Aug 18, 2024):
(Ignore the below, see next comment for why I am wrong here lol)
So, separately from howlocalDateTimeis calculated, I'm pretty sure we can safely make the client-side change to remove thezone: 'UTC'parameter fromtimeline-util. This parameter isn't intended to tell Luxon what the time zone of the input is; ISO8601 is a TZ-aware format, so that is already specified within the string. It is only relevant when formatting and transforming the time — from the Luxon docs:We don't want to format the times in UTC, so that one is clearly a bug. This change will slightly mitigate the impact of the incorrectlocalDateTimes.I totally understand waiting until a comprehensive test suite etc is written to make the change tolocalDateTime, though.@tjhorner commented on GitHub (Aug 18, 2024):
Ok, I'm reading over that original PR again and I think I get the gist of the change. The goal is for assets to be sorted, grouped, etc. by the local time of capture, e.g. if two photos were taken at 00:00 in any time zone, they will still both show up in the same day no matter what. I understand why the times are being formatted as UTC now, since that is intended to be the "local" TZ-less capture date.
The issue, then, is happening when the EXIF data has no datetime tags and
asset.fileCreatedAtis used instead. This means thatdateTimeOriginalwill still be TZ-corrected, but there will be notimeZoneOffsetbecause the date did not originate from the tags themselves, but instead the system. SolocalDateTimewill still be the correct UTC timestamp, but incorrect in the context of the local capture date.(Sorry for the thread spam! Just trying to understand the issue and context better.)
@etnoy commented on GitHub (Aug 18, 2024):
Thanks for your help in looking into this. As you can probably tell, this is a can of worms indeed.
When I'm back at my computer, I think we should start to add more e2e tests and add relevant TZ cases to our test asset repository. Then we can start changing code.
@tjhorner commented on GitHub (Aug 18, 2024):
Totally. Working with dates is such a pain 😅
Sounds good to me. Let me know if you would like me to send over any of the photos I'm experiencing issues with to assist in writing those test cases.
@tjhorner commented on GitHub (Aug 19, 2024):
Was doing some more research on the rendering/formatting part — I know we're waiting for those E2E test cases before doing any implementation work, but thought I'd share some notes here as they may be helpful in the future. Plus, if I try to keep all this ephemeral knowledge about time and time zones in my head I think it may explode.
One part of the issue is that the dates are being formatted to the relative time in UTC, since that's how
localDateTimeis stored. We want the formatting to happen relative to the current local time, and it seems we can usedate.setZone("default", { keepLocalTime: true })to change the time zone but not actually change the date/time to match. This means the local time at date of capture will be preserved and the correct relative terms will be used based on the user's current time zone.Example:
Photo taken on August 18, 2024 at 12:00 in any time zone has
localDateTimeof2024-08-18T12:00:00.000Z. This is parsed as UTC then changed to the user's current time zone with.setZone("default", { keepLocalTime: true }). Basically, it will format it as if the photo was taken at 12:00 in the user's current local time no matter what time zone it was originally taken in, which is what is expected.Hopefully this makes sense. It's difficult to illustrate/explain 😅
@C-Otto commented on GitHub (Aug 30, 2024):
I'll have a look at this. Personal note: issue surfaces in album c539fe5c-5ae3-4275-b27a-48eba9050341.
@C-Otto commented on GitHub (Aug 30, 2024):
Some insights (only web, I haven't looked at the app). I'm in Germany and my browser is configured to use Europe/Berlin, which currently is at offset +2. The Immich server container is also using Europe/Berlin.
TZ is used by exiftool as a fallback in case the time zone cannot be determined from the image metadata.I think this is confusing, as the time zone is not the same thing as the offset relative to UTC. For example, the time zone Europe/Berlin means +1 in winter and +2 in summer (which is working fine, see below). As the date and offset (usually) is part of some asset's metadata, this suffices to place it on a timeline, or convert the information to some (local, browser specific) representation, though.Z) should be treated differently than explicitly configured offsets (+00:00). Currently, Immich writes outZinstead of+00:00when explicitly selecting the Iceland timezone. To me, this is a bug. The cause might be in a downstream library: https://github.com/photostructure/exiftool-vendored.js/issues/203@sirweazel commented on GitHub (Sep 9, 2024):
There are a lot of similar time issue topics. I'm trying to follow them as i have this issue or similar like others. Here i posted some screenshots showing the date of the DB container not using the environmental variable. Could that be an issue, and possible why the photos show as yesterday (like i'm running a few hours in the future)? I show time i took screenshots, and showing "yesterday" but it was still today. Conainer was running a few hours ahead not using eastern or new york time zone.
I didn't want to repost all my screenshots, so i'll link to this other thread.
https://github.com/immich-app/immich/discussions/12322#discussioncomment-10585286
@sirweazel commented on GitHub (Sep 13, 2024):
There are multiple threads with this issue. In one of the threads I'm following, which I mentioned at previous post, It looks like someone might have posted a fix. Link below. I'm on my mobile so I'm having difficulty formatting things correctly if someone wants to tidy up my post feel free.
https://github.com/immich-app/immich/pull/12612
@danieldietzler commented on GitHub (Sep 21, 2024):
I'd like to close this in favor of #12650. Any objections?
@danieldietzler commented on GitHub (Sep 21, 2024):
Oh and actually, it may have been fixed by the PR @sirweazel referenced, yea. Could someone verify?
@snuq commented on GitHub (Sep 26, 2024):
If the fix mentioned above has been put into the latest release, then its not fixed yet. The issue still exists in 1.116, in fact if anything its gotten WORSE, now the times/dates in the info panel are incorrect as well.
to illustrate -

all those photos were taken on the 10th, which immich seems to at least have an idea of internally or it wouldnt be putting them BELOW the other photos.... in previous versions, the info panel for the lower photos would say the correct date of the 10th, but now the info panel shows the 11th
my server still has the TZ environment variable set to "America/Los_Angeles"
@danieldietzler commented on GitHub (Sep 26, 2024):
Did you re-extract metadata for those again?
@snuq commented on GitHub (Sep 26, 2024):
i selected them and did 'refresh metadata' from the hamburger menu. i havnt done a full db refresh tho
@danieldietzler commented on GitHub (Sep 26, 2024):
That should be enough. I'd like to close this in favor of #12650 though, as that's supposed to bundle all those issues. I'd appreciate it if you could post a message summarizing the issue there, and also provide a sample file (as a zip archive).
@Tjsyl commented on GitHub (Sep 29, 2024):
Most of the images from today show "Yesterday" and one shows in the future "Sun, Sep 29".