2014-05-22 5 views
5

Comment puis-je obtenir l'heure actuelle pour l'application Samsung SmartTV écrite en HTML, CSS et JavaScript? Le problème est en objet Date. Lorsque j'appelle le new Date() sur l'environnement Web, je reçois la valeur Date du système avec l'heure actuelle. Mais quand j'instancie la date sur SmartTV, elle renvoie un résultat incorrect. Je m'attendais au même comportement que sur le web. Dans les réglages du téléviseur, l'heure est réglée pour être déterminée automatiquement.Samsung SmartTV obtenir l'heure actuelle

L'heure correcte ne s'affiche que lorsque je règle manuellement le fuseau horaire lors du premier démarrage du téléviseur. Je suppose que c'est un bug de la plate-forme Samsung SmartTV.

+0

Je ne pense pas que ce serait trop large. Cher Andrei, peut-être que vous inséreriez des échantillons de code ... et voteriez pour rouvrir votre propre question. – peterh

Répondre

4

J'ai eu le même problème. new Date() sur les téléviseurs intelligents Samsung n'obtient pas l'heure en fonction du paramètre actuel, mais reçoit le temps système sous-jacent. Il retourne toujours un horodatage UTC, aussi.

Heureusement, il existe une fonction API, GetEpochTime(), qui vous permet de (corriger) le problème.

Voici le code que je utilise sur les plateformes 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() fonctionne maintenant très bien pour afficher l'heure actuelle sur mon 2013 Samsung Smart TV. Cependant, vous pouvez toujours avoir des problèmes lors de la comparaison des horodatages à l'heure actuelle.

3

Dans la plupart des cas, l'heure à la télévision est correcte, mais dans un fuseau horaire différent. Par exemple, j'ai deux appareils près de chez moi en ce moment, LG TV date d'affichage avec GMT + 3, et Samsung avec GMT + 1. Les deux appareils affichent l'heure correcte.

Si vous avez besoin de l'afficher avec fuseau horaire spécifique, vous pouvez 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); 

Si l'horloge de télévision interne n'est pas fiable, vous pouvez utiliser web-services to get current time.

+0

Je comprends que je peux durer + N heures, mais j'ai besoin de soutien des fuseaux horaires. – Andrei

+0

Vous essayez de deviner timezone par adresse IP si vous avez le côté serveur dans votre application. http://stackoverflow.com/questions/743505/how-to-get-time-zone-through-ip-address-in-php –