2014-05-22 12 views
5

Jak mogę uzyskać aktualny czas na aplikację Samsung SmartTV napisaną w HTML, CSS i JavaScript?Samsung SmartTV pobierz aktualny czas

Problem dotyczy obiektu JavaScript Date. Gdy zadzwonię pod numer new Date() w środowisku internetowym, otrzymam systemową wartość daty z bieżącym czasem. Ale kiedy stawiam datę na SmartTV, zwraca nieprawidłowy wynik. Spodziewałem się takiego samego zachowania jak w sieci. W ustawieniach telewizora czas jest ustalany automatycznie.

Prawidłowy czas zwraca tylko wtedy, gdy ręcznie ustawię strefę czasową podczas pierwszego rozruchu telewizora. Przypuszczam, że to błąd platformy Samsung SmartTV.

+0

Nie sądzę, że byłoby zbyt szerokie. Drogi Andrei, może gdybyś wstawił kilka próbek kodu ... i zagłosuj, by ponownie otworzyć swój własny quesiton. – peterh

Odpowiedz

4

Miałem ten sam problem. new Date() na telewizorze Samsung Smart TV nie pobiera czasu zgodnie z bieżącym ustawieniem, ale zamiast tego pobiera podstawowy czas systemowy. Zawsze zwraca również znacznik czasu UTC. Na szczęście istnieje funkcja API, GetEpochTime(), która pozwala (sortować) ją naprawić.

Oto kod używam na platformach 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() teraz działa dobrze na wyświetlanie aktualnego czasu w moim 2013 Samsung Smart TV. Mimo to możesz mieć problemy z porównywaniem znaczników czasu z bieżącą godziną.

3

W większości przypadków czas w telewizji jest prawidłowy, tylko w innej strefie czasowej.

Na przykład mam 2 urządzenia blisko mnie w tym momencie, LG TV wyświetla datę z GMT + 3, a Samsung z GMT + 1. Oba urządzenia wyświetlają prawidłowy czas.

Jeśli chcesz wyświetlić go z określonej strefy czasowej, można add time zone offset to date:

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

Jeśli wewnętrzny zegar TV nie jest wiarygodne, można użyć web-services to get current time.

+0

Rozumiem, że mogę kodować + N godzin, ale potrzebuję wsparcia stref czasowych. – Andrei

+0

Możesz spróbować odgadnąć strefę czasową według adresu IP, jeśli masz stronę serwera w swojej aplikacji. http://stackoverflow.com/questions/743505/how-to-get-time-zone-through-ip-address-in-php –

Powiązane problemy