navigator.geolocation не возвращает действительную метку времени с iOS 6

У меня есть довольно простой базовый код GeoLocation в приложении для браузера, который должен сообщать точные значения GPS для широты / долготы и метки времени.

Это работало на устройствах Android и с iPhone до iOS 5.1.1.

Теперь одно из наших применений обновлено до iOS 6.0.1, и возвращенные метки времени теперь недействительны.

Код JavaScript имеет базовую форму:

navigator.geolocation.getCurrentPosition(foundLocation, noLocation, { enableHighAccuracy: accuracyVal, timeout: timeoutVal, maximumAge: maxageVal }

function foundLocation(position) {
    var lat = position.coords.latitude;
    var long = position.coords.longitude;
var gps_ts =  position.timestamp;
}

Устройства Android продолжают возвращать временную метку UNIX gps_ts, которая соответствует реальному времени, но в iOS 6 мы получаем временные метки, которые переводятся в нечетные даты в промежутке между 1958 и 1969 годами. Похоже, они измеряют что-то хронологическое, поскольку значения увеличиваются с последовательным увеличением использует, но они больше не являются метками времени UNIX текущего времени.

Помощь с этим будет оценена. Я вижу, что есть другие отчеты с поддержкой геолокации iOS 6 (см. https://discussions.apple.com/thread/4313850?start=0&tstart=0), но ничего конкретно об использовании javascript и функциональности меток времени.

1 ответ

Я экспериментировал с этим сегодня. Из того, что я могу сказать timestamp в iOS "разрешение" в 1000 раз выше, чем в других браузерах (микросекунды вместо миллисекунд). Я написал вспомогательную функцию, подобную этой, чтобы обойти это:

function getGeoTimestampDate(timestamp) {
    if (timestamp > 14000000000000) { timestamp = Math.floor(timestamp / 1000); }
    return new Date(timestamp);
}

Я смог провести тестирование только на нескольких устройствах (оригинальный iPad и iPhone 4, оба на iOS 6.0.1), поэтому я был бы признателен, если кто-нибудь может подтвердить, работает ли он на других.

Другие вопросы по тегам