iOS: Timezone on screenshots bug #7986

Closed
opened 2026-02-05 13:27:07 +03:00 by OVERLORD · 6 comments
Owner

Originally created by @Starksoft on GitHub (Dec 4, 2025).

I have searched the existing issues, both open and closed, to make sure this is not a duplicate report.

  • Yes

The bug

Hi, I figured out the bug when uploading screenshots from iOS device:

When I take a screenshot it has correct date/time and timezone. But after uploading i have different timezone on web and iOS app.

If you need examples of screenshots, I can provide them later in comments

The OS that Immich Server is running on

DSM with docker (linux)

Version of Immich Server

v2.3.1

Version of Immich Mobile App

v2.3.0 build 236

Platform with the issue

  • Server
  • Web
  • Mobile

Device make and model

iPhone 17 Pro Max

Your docker-compose.yml content

#
# WARNING: To install Immich, follow our guide: https://immich.app/docs/install/docker-compose
#
# Make sure to use the docker-compose.yml of the current release:
#
# https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml
#
# The compose file on main may not be compatible with the latest release.

name: immich

services:
  immich-server:
    container_name: immich_server
    image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release}
    # extends:
    #   file: hwaccel.transcoding.yml
    #   service: cpu # set to one of [nvenc, quicksync, rkmpp, vaapi, vaapi-wsl] for accelerated transcoding
    volumes:
      # Do not edit the next line. If you want to change the media storage location on your system, edit the value of UPLOAD_LOCATION in the .env file
      - ${UPLOAD_LOCATION}:/data
      - /etc/localtime:/etc/localtime:ro
    env_file:
      - .env
    ports:
      - '2283:2283'
      - '5002:2283'
    depends_on:
      - redis
      - database
    restart: always
    healthcheck:
      disable: false

  immich-machine-learning:
    container_name: immich_machine_learning
    # For hardware acceleration, add one of -[armnn, cuda, rocm, openvino, rknn] to the image tag.
    # Example tag: ${IMMICH_VERSION:-release}-cuda
    image: ghcr.io/immich-app/immich-machine-learning:${IMMICH_VERSION:-release}
    # extends: # uncomment this section for hardware acceleration - see https://immich.app/docs/features/ml-hardware-acceleration
    #   file: hwaccel.ml.yml
    #   service: cpu # set to one of [armnn, cuda, rocm, openvino, openvino-wsl, rknn] for accelerated inference - use the `-wsl` version for WSL2 where applicable
    volumes:
      - model-cache:/cache
    env_file:
      - .env
    restart: always
    healthcheck:
      disable: false

  redis:
    container_name: immich_redis
    image: docker.io/valkey/valkey:8-bookworm@sha256:fea8b3e67b15729d4bb70589eb03367bab9ad1ee89c876f54327fc7c6e618571
    healthcheck:
      test: redis-cli ping || exit 1
    restart: always

  database:
    container_name: immich_postgres
    image: ghcr.io/immich-app/postgres:14-vectorchord0.4.3-pgvectors0.2.0@sha256:c44be5f2871c59362966d71eab4268170eb6f5653c0e6170184e72b38ffdf107
    environment:
      POSTGRES_PASSWORD: ${DB_PASSWORD}
      POSTGRES_USER: ${DB_USERNAME}
      POSTGRES_DB: ${DB_DATABASE_NAME}
      POSTGRES_INITDB_ARGS: '--data-checksums'
      # Uncomment the DB_STORAGE_TYPE: 'HDD' var if your database isn't stored on SSDs
      # DB_STORAGE_TYPE: 'HDD'
    volumes:
      # Do not edit the next line. If you want to change the database storage location on your system, edit the value of DB_DATA_LOCATION in the .env file
      - ${DB_DATA_LOCATION}:/var/lib/postgresql/data
    shm_size: 128mb
    restart: always

volumes:
  model-cache:

Your .env content

# You can find documentation for all the supported env variables at https://immich.app/docs/install/environment-variables

# The location where your uploaded files are stored
UPLOAD_LOCATION=./library

# The location where your database files are stored. Network shares are not supported for the database
DB_DATA_LOCATION=./postgres

# To set a timezone, uncomment the next line and change Etc/UTC to a TZ identifier from this list: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List
# TZ=Etc/UTC

# The Immich version to use. You can pin this to a specific version like "v1.71.0"
IMMICH_VERSION=release

# Connection secret for postgres. You should change it to a random password
# Please use only the characters `A-Za-z0-9`, without special characters or spaces
DB_PASSWORD=###

# The values below this line do not need to be changed
###################################################################################
DB_USERNAME=###
DB_DATABASE_NAME=immich

Reproduction steps

  1. Take screenshot on iOS device
  2. Upload to server
  3. Check the date time and timezone
    ...

Relevant log output


Additional information

No response

Originally created by @Starksoft on GitHub (Dec 4, 2025). ### I have searched the existing issues, both open and closed, to make sure this is not a duplicate report. - [x] Yes ### The bug Hi, I figured out the bug when uploading screenshots from iOS device: When I take a screenshot it has correct date/time and timezone. But after uploading i have different timezone on web and iOS app. If you need examples of screenshots, I can provide them later in comments ### The OS that Immich Server is running on DSM with docker (linux) ### Version of Immich Server v2.3.1 ### Version of Immich Mobile App v2.3.0 build 236 ### Platform with the issue - [x] Server - [x] Web - [x] Mobile ### Device make and model iPhone 17 Pro Max ### Your docker-compose.yml content ```YAML # # WARNING: To install Immich, follow our guide: https://immich.app/docs/install/docker-compose # # Make sure to use the docker-compose.yml of the current release: # # https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml # # The compose file on main may not be compatible with the latest release. name: immich services: immich-server: container_name: immich_server image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release} # extends: # file: hwaccel.transcoding.yml # service: cpu # set to one of [nvenc, quicksync, rkmpp, vaapi, vaapi-wsl] for accelerated transcoding volumes: # Do not edit the next line. If you want to change the media storage location on your system, edit the value of UPLOAD_LOCATION in the .env file - ${UPLOAD_LOCATION}:/data - /etc/localtime:/etc/localtime:ro env_file: - .env ports: - '2283:2283' - '5002:2283' depends_on: - redis - database restart: always healthcheck: disable: false immich-machine-learning: container_name: immich_machine_learning # For hardware acceleration, add one of -[armnn, cuda, rocm, openvino, rknn] to the image tag. # Example tag: ${IMMICH_VERSION:-release}-cuda image: ghcr.io/immich-app/immich-machine-learning:${IMMICH_VERSION:-release} # extends: # uncomment this section for hardware acceleration - see https://immich.app/docs/features/ml-hardware-acceleration # file: hwaccel.ml.yml # service: cpu # set to one of [armnn, cuda, rocm, openvino, openvino-wsl, rknn] for accelerated inference - use the `-wsl` version for WSL2 where applicable volumes: - model-cache:/cache env_file: - .env restart: always healthcheck: disable: false redis: container_name: immich_redis image: docker.io/valkey/valkey:8-bookworm@sha256:fea8b3e67b15729d4bb70589eb03367bab9ad1ee89c876f54327fc7c6e618571 healthcheck: test: redis-cli ping || exit 1 restart: always database: container_name: immich_postgres image: ghcr.io/immich-app/postgres:14-vectorchord0.4.3-pgvectors0.2.0@sha256:c44be5f2871c59362966d71eab4268170eb6f5653c0e6170184e72b38ffdf107 environment: POSTGRES_PASSWORD: ${DB_PASSWORD} POSTGRES_USER: ${DB_USERNAME} POSTGRES_DB: ${DB_DATABASE_NAME} POSTGRES_INITDB_ARGS: '--data-checksums' # Uncomment the DB_STORAGE_TYPE: 'HDD' var if your database isn't stored on SSDs # DB_STORAGE_TYPE: 'HDD' volumes: # Do not edit the next line. If you want to change the database storage location on your system, edit the value of DB_DATA_LOCATION in the .env file - ${DB_DATA_LOCATION}:/var/lib/postgresql/data shm_size: 128mb restart: always volumes: model-cache: ``` ### Your .env content ```Shell # You can find documentation for all the supported env variables at https://immich.app/docs/install/environment-variables # The location where your uploaded files are stored UPLOAD_LOCATION=./library # The location where your database files are stored. Network shares are not supported for the database DB_DATA_LOCATION=./postgres # To set a timezone, uncomment the next line and change Etc/UTC to a TZ identifier from this list: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List # TZ=Etc/UTC # The Immich version to use. You can pin this to a specific version like "v1.71.0" IMMICH_VERSION=release # Connection secret for postgres. You should change it to a random password # Please use only the characters `A-Za-z0-9`, without special characters or spaces DB_PASSWORD=### # The values below this line do not need to be changed ################################################################################### DB_USERNAME=### DB_DATABASE_NAME=immich ``` ### Reproduction steps 1. Take screenshot on iOS device 2. Upload to server 3. Check the date time and timezone ... ### Relevant log output ```shell ``` ### Additional information _No response_
Author
Owner

@bo0tzz commented on GitHub (Dec 4, 2025):

I doubt this is really a bug, more likely your device isn't setting proper metadata on these screenshot files. Try inspecting one with exiftool.

@bo0tzz commented on GitHub (Dec 4, 2025): I doubt this is really a bug, more likely your device isn't setting proper metadata on these screenshot files. Try inspecting one with `exiftool`.
Author
Owner

@Starksoft commented on GitHub (Dec 4, 2025):

Exif output

ExifTool Version Number         : 13.36
File Name                       : IMG_0147.PNG
Directory                       : IMG_0147
File Size                       : 11 MB
File Modification Date/Time     : 2025:12:03 23:29:17+03:00
File Access Date/Time           : 2025:12:04 11:27:55+03:00
File Inode Change Date/Time     : 2025:12:04 11:27:53+03:00
File Permissions                : -rw-r--r--
File Type                       : PNG
File Type Extension             : png
MIME Type                       : image/png
Image Width                     : 1320
Image Height                    : 2868
Bit Depth                       : 16
Color Type                      : RGB
Compression                     : Deflate/Inflate
Filter                          : Adaptive
Interlace                       : Noninterlaced
Profile Name                    : kCGColorSpaceDisplayP3
Profile CMM Type                : Apple Computer Inc.
Profile Version                 : 4.0.0
Profile Class                   : Display Device Profile
Color Space Data                : RGB
Profile Connection Space        : XYZ
Profile Date Time               : 2022:01:01 00:00:00
Profile File Signature          : acsp
Primary Platform                : Apple Computer Inc.
CMM Flags                       : Not Embedded, Independent
Device Manufacturer             : Apple Computer Inc.
Device Model                    : 
Device Attributes               : Reflective, Glossy, Positive, Color
Rendering Intent                : Perceptual
Connection Space Illuminant     : 0.9642 1 0.82491
Profile Creator                 : Apple Computer Inc.
Profile ID                      : 0
Profile Description             : Display P3
Profile Copyright               : Copyright Apple Inc., 2022
Media White Point               : 0.96419 1 0.82489
Red Matrix Column               : 0.51512 0.2412 -0.00105
Green Matrix Column             : 0.29198 0.69225 0.04189
Blue Matrix Column              : 0.1571 0.06657 0.78407
Red Tone Reproduction Curve     : (Binary data 32 bytes, use -b option to extract)
Chromatic Adaptation            : 1.04788 0.02292 -0.0502 0.02959 0.99048 -0.01706 -0.00923 0.01508 0.75168
Blue Tone Reproduction Curve    : (Binary data 32 bytes, use -b option to extract)
Green Tone Reproduction Curve   : (Binary data 32 bytes, use -b option to extract)
Color Primaries                 : SMPTE EG 432-1
Transfer Characteristics        : sRGB or sYCC
Matrix Coefficients             : Identity matrix
Video Full Range Flag           : 1
Exif Byte Order                 : Big-endian (Motorola, MM)
Image Description               : Screenshot
Orientation                     : Horizontal (normal)
X Resolution                    : 144
Y Resolution                    : 144
Resolution Unit                 : inches
Modify Date                     : 2025:12:03 23:29:17
Date/Time Original              : 2025:12:03 23:29:17
User Comment                    : Screenshot
Exif Image Width                : 1320
Exif Image Height               : 2868
Pixels Per Unit X               : 5669
Pixels Per Unit Y               : 5669
Pixel Units                     : meters
XMP Toolkit                     : XMP Core 6.0.0
Date Created                    : 2025:12:03 23:29:17
Description                     : Screenshot
Image Size                      : 1320x2868
Megapixels                      : 3.8
@Starksoft commented on GitHub (Dec 4, 2025): Exif output ``` ExifTool Version Number : 13.36 File Name : IMG_0147.PNG Directory : IMG_0147 File Size : 11 MB File Modification Date/Time : 2025:12:03 23:29:17+03:00 File Access Date/Time : 2025:12:04 11:27:55+03:00 File Inode Change Date/Time : 2025:12:04 11:27:53+03:00 File Permissions : -rw-r--r-- File Type : PNG File Type Extension : png MIME Type : image/png Image Width : 1320 Image Height : 2868 Bit Depth : 16 Color Type : RGB Compression : Deflate/Inflate Filter : Adaptive Interlace : Noninterlaced Profile Name : kCGColorSpaceDisplayP3 Profile CMM Type : Apple Computer Inc. Profile Version : 4.0.0 Profile Class : Display Device Profile Color Space Data : RGB Profile Connection Space : XYZ Profile Date Time : 2022:01:01 00:00:00 Profile File Signature : acsp Primary Platform : Apple Computer Inc. CMM Flags : Not Embedded, Independent Device Manufacturer : Apple Computer Inc. Device Model : Device Attributes : Reflective, Glossy, Positive, Color Rendering Intent : Perceptual Connection Space Illuminant : 0.9642 1 0.82491 Profile Creator : Apple Computer Inc. Profile ID : 0 Profile Description : Display P3 Profile Copyright : Copyright Apple Inc., 2022 Media White Point : 0.96419 1 0.82489 Red Matrix Column : 0.51512 0.2412 -0.00105 Green Matrix Column : 0.29198 0.69225 0.04189 Blue Matrix Column : 0.1571 0.06657 0.78407 Red Tone Reproduction Curve : (Binary data 32 bytes, use -b option to extract) Chromatic Adaptation : 1.04788 0.02292 -0.0502 0.02959 0.99048 -0.01706 -0.00923 0.01508 0.75168 Blue Tone Reproduction Curve : (Binary data 32 bytes, use -b option to extract) Green Tone Reproduction Curve : (Binary data 32 bytes, use -b option to extract) Color Primaries : SMPTE EG 432-1 Transfer Characteristics : sRGB or sYCC Matrix Coefficients : Identity matrix Video Full Range Flag : 1 Exif Byte Order : Big-endian (Motorola, MM) Image Description : Screenshot Orientation : Horizontal (normal) X Resolution : 144 Y Resolution : 144 Resolution Unit : inches Modify Date : 2025:12:03 23:29:17 Date/Time Original : 2025:12:03 23:29:17 User Comment : Screenshot Exif Image Width : 1320 Exif Image Height : 2868 Pixels Per Unit X : 5669 Pixels Per Unit Y : 5669 Pixel Units : meters XMP Toolkit : XMP Core 6.0.0 Date Created : 2025:12:03 23:29:17 Description : Screenshot Image Size : 1320x2868 Megapixels : 3.8 ```
Author
Owner

@Starksoft commented on GitHub (Dec 4, 2025):

2025:12:03 23:29:17+03:00 - correct date

Here is the original screenshot

IMG_0147.PNG.zip

@Starksoft commented on GitHub (Dec 4, 2025): 2025:12:03 23:29:17+03:00 - correct date Here is the original screenshot [IMG_0147.PNG.zip](https://github.com/user-attachments/files/23926899/IMG_0147.PNG.zip)
Author
Owner

@bo0tzz commented on GitHub (Dec 4, 2025):

Date/Time Original : 2025:12:03 23:29:17

This is the "main" time field that Immich looks at. Since that doesn't have proper timezone information in it, there's not much we can do.

@bo0tzz commented on GitHub (Dec 4, 2025): Date/Time Original : 2025:12:03 23:29:17 This is the "main" time field that Immich looks at. Since that doesn't have proper timezone information in it, there's not much we can do.
Author
Owner

@Starksoft commented on GitHub (Dec 4, 2025):

Why other apps can correctly handle this case?
Google Photo works well, iCloud photos too.

You can calculate UTC from 'Date/Time Original : 2025:12:03 23:29:17' just take timezone from immich client app

@Starksoft commented on GitHub (Dec 4, 2025): Why other apps can correctly handle this case? Google Photo works well, iCloud photos too. You can calculate UTC from 'Date/Time Original : 2025:12:03 23:29:17' just take timezone from immich client app
Author
Owner

@chenghaopeng commented on GitHub (Dec 8, 2025):

Since I updated to 2.3.1, I am also troubled by this question. For example, I took a screenshot at 2025-12-08 18:26 UTC+8. Then the screenshot was uploaded to Immich. Then the time of this screenshot is 2025-12-09 02:26 UTC+8 in my iOS app, while this is 2025-12-08 18:26 UTC in Web app.
I think it's a bug, because I did not encounter such a situation in previous versions. In previous versions, though the time would wrongly be 2025-12-08 18:26 UTC in Web app, it can be sorted correctly on the timeline. In iOS app, the time would correctly be 2025-12-08 18:26 UTC+8.

@chenghaopeng commented on GitHub (Dec 8, 2025): Since I updated to 2.3.1, I am also troubled by this question. For example, I took a screenshot at 2025-12-08 18:26 UTC+8. Then the screenshot was uploaded to Immich. Then the time of this screenshot is 2025-12-09 02:26 UTC+8 in my iOS app, while this is 2025-12-08 18:26 UTC in Web app. I think it's a bug, because I did not encounter such a situation in previous versions. In previous versions, though the time would wrongly be 2025-12-08 18:26 UTC in Web app, it can be sorted correctly on the timeline. In iOS app, the time would correctly be 2025-12-08 18:26 UTC+8.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: immich-app/immich#7986