2014-04-09 201 views
1

我正在爲一家公司提供實時飼料,該公司在當前24小時內顯示其生產計劃的狀態。問題是,有些員工需要能夠從國外和不同時區查看此活動飼料。服務器和瀏覽器之間的時間同步

有其需要顯示「現場」當前時間(服務器)2個元素:

  • 必須展示現場當前時間的時鐘。

    Clock

  • 一個進度條,顯示通過現場當前24小時 期間的進展。

    Progress Bar

我知道同步時間直播是低效的。我不知道如何去彌補時間在客戶端上,以匹配服務器,因爲我可能會遇到的一些問題:

  • 夏令時在任一位置提前
  • 時區或後面的服務器

如果任何人有任何經驗/想法來幫助它將不勝感激。

感謝

回答

3

服務器時間應該是UTC。這樣,移動時區就更加容易。

不依賴於客戶端的時區,因爲它取決於客戶端的機器,它可以設置爲任何時間和時區。有一個需要時區的帳戶。用於時區偏移量。同樣的原因,爲什麼在線服務問你你的時區而不是檢測它。

然後,你可以去間隔同步或套接字。請注意,延遲可能會延遲幾秒鐘。

間隔同步

您可以讓服務器提供抵消初始時間和時區。根據這些初始數據計算客戶的初始時間,並讓客戶端做點滴。由於腳本可能不同步,因此您需要定期同步到服務器,例如每5分鐘左右一次。

套接字

已在服務器計算用戶的時間在自己的時區,並通過套接字每秒發送的路線。所有你需要在客戶端做的就是顯示它。

+0

感謝所有的答案,這個答案解釋了一些有用的選項,我結束了與間隔同步方法。謝謝! –

1

直接從the MDN website

var x = new Date(); 
var currentTimeZoneOffsetInHours = x.getTimezoneOffset()/60; 

這將讓你在時區在UTC和本地時間(上面的例子中通過60將轉換爲小時)之間的分鐘偏差。這將已經解決了夏令時問題。

如果您的服務器將服務器時區偏移量放入頁面中的某個變量中,或者將其與實時數據一起發送,或者如果實時數據是UTC時間,則可以計算客戶端與數據之間的差異。

+0

爲什麼downvote? – jfriend00

0

爲用戶提供選擇它們所在時區的選項(通過下拉菜單或選項頁面),並使用php的本地函數date_default_timezone_set進行設置。

date_default_timezone_set(「Europe/Brussels」);

然後,主機服務器和用戶之間的時間差會自動計算,並且夏時制也會被照顧。

該文檔是在這裏:https://php.net/manual/en/timezones.php

然後使用PHP的日期功能顯示次數:

日期( 「C」); // ISO 8601 date

相關問題