Почему декодированная дата из Firebase имеет небольшое смещение в миллисекундах в Swift?IOS

Программируем под IOS
Ответить
Anonymous
 Почему декодированная дата из Firebase имеет небольшое смещение в миллисекундах в Swift?

Сообщение Anonymous »

Я получаю дату, хранящуюся в Firebase (метаданные Firestore или Storage), и декодирую ее в Swift, но заметил, что полученное значение не совсем то, что я ожидал.

Код: Выделить всё

 let query = db.collection("myCollection")
.whereField("myDate", isEqualTo: Timestamp(date: myDate)
Например, ожидаемая дата соответствует:

Код: Выделить всё

2025-10-12 22:00:00 +0000
timeIntervalSinceReferenceDate: 781999200
Однако, когда я извлекаю (используя другой фильтр) и декодирую дату в Swift, я получаю что-то вроде:

Код: Выделить всё

2025-10-12 22:00:00 +0000
timeIntervalSinceReferenceDate: 781999200.1029999
Между сохраненным и декодированным значением всегда существует небольшая разница в миллисекундах (около 0,1 секунды), что делает невозможным получение этой даты из базы данных.
Примечания:
  • Я использовал бэк-офис веб-сайта, чтобы установить дату, используя там компонент календаря.
  • Дата: хранится в Firebase как тип Timestamp.
  • Я декодирую его с помощью Date в Swift (через Codable или ручное декодирование).
  • Похоже, что преобразование часового пояса не требуется — обе стороны указаны в формате UTC.
  • Я использую Firebase Timestamp для запроса документа
Почему при декодировании метки времени Firebase в Swift Date появляется это небольшое смещение с плавающей запятой?
Это связано с потерей точности, различиями в формате кодирования или чем-то в том, как Firebase сериализует метки времени?
И существует ли рекомендуемый способ гарантировать, что декодированная дата точно соответствует исходной метке времени (без смещения в 0,1 с)?

Подробнее здесь: https://stackoverflow.com/questions/797 ... t-in-swift
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»