如何獲取用於HTML,CSS和JavaScript的三星SmartTV應用程序的當前時間?Samsung SmartTV獲取當前時間
問題出在Javascript Date
對象。當我在Web環境上調用new Date()
時,我收到帶有當前時間的系統日期值。但是當我在SmartTV上實例化日期時,它返回不正確的結果。我期望與網絡上的行爲相同。在電視設置中,時間設置爲自動確定。
只有在第一次電視機啓動時手動設置時區時,纔會返回正確的時間。我想這是三星SmartTV平臺的缺陷。
如何獲取用於HTML,CSS和JavaScript的三星SmartTV應用程序的當前時間?Samsung SmartTV獲取當前時間
問題出在Javascript Date
對象。當我在Web環境上調用new Date()
時,我收到帶有當前時間的系統日期值。但是當我在SmartTV上實例化日期時,它返回不正確的結果。我期望與網絡上的行爲相同。在電視設置中,時間設置爲自動確定。
只有在第一次電視機啓動時手動設置時區時,纔會返回正確的時間。我想這是三星SmartTV平臺的缺陷。
我有同樣的問題。三星智能電視上的new Date()
沒有按照當前設置獲得時間,而是獲得底層系統時間。它總是返回一個UTC時間戳。
幸運的是,有一個API函數GetEpochTime()
,它允許您(排序)修復它。
下面是我使用的是三星的平臺代碼:
(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()
現在工作正常,我的2013三星智能電視上顯示當前時間。但是,將時間戳與當前時間進行比較時可能仍然存在問題。
在大多數情況下,電視上的時間是正確的,它只是在不同的時區。
例如,此時我有2臺設備在我附近,LG電視顯示日期爲GMT + 3,三星顯示爲GMT + 1。兩個設備顯示正確的時間。
如果您需要與特定的時間段來顯示它,你可以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);
如果內部時鐘電視是不可靠的,你可以使用web-services to get current time。
據我所知,我可以硬編碼+ N小時,但我需要時區的支持。 – Andrei
如果你的應用程序中有服務器端,你可以嘗試通過IP地址猜測時區。 http://stackoverflow.com/questions/743505/how-to-get-time-zone-through-ip-address-in-php –
我不認爲它會太寬泛。親愛的安德烈,也許如果你插入一些代碼示例...並投票重新打開你自己的問題。 – peterh