2016-12-02 51 views
0

我希望在系統小時更改時得到通知。從上午9點到上午10點或下午5點到6點。基本上在我的應用程序中,我想按小時更改顯示。我知道我可以通過手動計算來獲得更改。我只是好奇有沒有其他方式,以便系統小時自動更改時我可以得到通知。在Angular 2中獲取系統小時更改事件

回答

2

沒有建立服務的angular2,但你可以創建自己的。

下面是一個簡單服務來演示如何可以做到:

@Injectable() 
class TimeNotifyService { 

    private _lastHour; 
    private _lastMinute; 
    private _lastSecond; 

    public hourChanged = new Subject<number>(); 
    public minuteChanged = new Subject<number>(); 
    public secondChanged = new Subject<number>(); 

    constructor() { 
    setTimeout(() => this.timer(), 2000); // just a delay to get first hour-change.. 
    } 

    private timer() { 
    const d = new Date(); 
    const curHour = d.getHours(); 
    const curMin = d.getMinutes(); 
    const curSec = d.getSeconds(); 

    if (curSec != this._lastSecond) { 
     this.secondChanged.next(curSec); 
     this._lastSecond = curSec; 
    } 

    if (curMin != this._lastMinute) { 
     this.minuteChanged.next(curMin); 
     this._lastMinute = curMin; 
    } 

    if (curHour != this._lastHour) { 
     this.hourChanged.next(curHour); 
     this._lastHour = curHour; 
    } 

    // timeout is set to 250ms JUST to demonstrate the seconds-change.. 
    // if only hour-changes are needed, there is NO reason to check that often ! :) 
    setTimeout(() => this.timer(), 250); 
    } 
} 

現場演示:https://plnkr.co/edit/QJCSnlMKpboteXbIYzqt?p=preview

+0

好。謝謝你的回答。 –

+0

難道你不能只計算下一個整小時的差異,然後將超時設置爲該距離,而不是每小時檢查4次,如果小時已更改? –

+0

當然,它只是爲了秒演示。 :)我會對該行發表評論! – mxii