Samsung SmartTV получит текущее время

Как узнать текущее время для приложения Samsung SmartTV, написанного на HTML, CSS и JavaScript?

Проблема в Javascript Date объект. Когда я звоню new Date() в веб-среде я получаю системное значение Date с текущим временем. Но когда я создаю дату на SmartTV, она возвращает неверный результат. Я ожидал того же поведения, что и в Интернете. В настройках телевизора время устанавливается автоматически.

Правильное время возвращается только тогда, когда я вручную установил часовой пояс при первой загрузке телевизора. Полагаю, это ошибка платформы Samsung SmartTV.

2 ответа

Решение

У меня такая же проблема. new Date() на Samsung Smart TV не получают время в соответствии с текущими настройками, а вместо этого получает базовое системное время. Также всегда возвращается метка времени UTC.

К счастью, есть функция API, GetEpochTime(), что позволяет (вроде) исправить это.

Вот код, который я использую на платформах Samsung:

(function (OldDate) {
    // Get a reference to Samsung's TIME API
    var time = document.createElement('object');
    time.setAttribute('classid', 'clsid:SAMSUNG-INFOLINK-TIME');
    document.body.appendChild(time);

    // Replace the existing Date() constructor
    window.Date = function (a, b, c, d, e, f, g) {
        switch (arguments.length) {
            case 0:
                return new OldDate(time.GetEpochTime() * 1000);

            case 1: return new OldDate(a);
            case 2: return new OldDate(a, b);
            case 3: return new OldDate(a, b, c);
            case 4: return new OldDate(a, b, c, d);
            case 5: return new OldDate(a, b, c, d, e);
            case 6: return new OldDate(a, b, c, d, e, f);
            case 7: return new OldDate(a, b, c, d, e, f, g);
        }
    };

    // Copy static function properties
    Date.now   = function () { return time.GetEpochTime() * 1000; };
    Date.UTC   = OldDate.UTC;
    Date.parse = OldDate.parse;
})(Date);

new Date() теперь отлично работает для отображения текущего времени на моем Samsung Smart TV 2013 года. Однако при сравнении временных меток с текущим временем у вас могут возникнуть проблемы.

В большинстве случаев время на ТВ правильное, оно просто в другом часовом поясе.

Например, в данный момент у меня есть 2 устройства, LG TV показывает дату с GMT+3 и Samsung с GMT+1. Оба устройства отображают правильное время.

Если вам нужно отобразить его с определенным часовым поясом, вы можете добавить смещение часового пояса к дате:

var date = new Date();
var offset = 4 * 3600000;//Moscow(GMT+4)
var userOffset = date.getTimezoneOffset() * 60000;
var fixedTime = new Date(date.getTime() + offset + userOffset);

Если внутренние телевизионные часы ненадежны, вы можете использовать веб-сервисы, чтобы узнать текущее время.

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