[英]Unix time on different devices in different time zones
假設我有一個執行此操作的PHP腳本:
$timeNow = 1349852400000; // Unix time for Oct 10, 2012 00:00:00 PDT
echo "<script type='text/javascript'>";
echo "setTimeout(function(){alert('time out!');}, $timeNow - Date.now());";
echo "</script>";
如果將此腳本提供給日期/時間設置為2013的設備怎么辦?會發生什么? 如果將其提供給日期/時間設置為2010的設備怎么辦?
設置服務器時鍾的時間和日期是否重要? 這對2013年的設備有何影響? 那卡在2010年的那張呢?
如果我想為$timeNow
選擇一個值,該值將在2012年10月10日00:00:00在加利福尼亞州舊金山同步的所有地方(即,設置為太平洋時間的設備和設置為“中部時間”時,即使“中部時間”設備將在凌晨2:00:00仍應在同一時間顯示警報),我可以這樣做嗎? 我是否需要為Pacific設備提供一個值,為Central設備提供另一個值,以說明與UTC的時區差異?
抱歉,時區確實讓我感到困惑。 我的頭纏在他們身上有麻煩。
如果您為此使用Unix時間,則無需擔心(下面有一個例外)。 聽起來好像您希望無論時區如何,警報都會在同一時刻在世界各地彈出。
Unix時間0是
因此,如果您安排在時間0發出警報,那么舊金山和倫敦的人們會同時看到該警報。 在任何Unix時間上都是同上的,實際上只是一個描述時間的數字。 世界各地的同一瞬間。 所以下面兩個日期時間字符串
是同一時刻的表示,以Unix時間0表示。
同樣,無論時區如何,世界上每個人都在同一時刻看到時間1349852400000。 因此,由於您的代碼試圖在Unix時間描述的給定時刻警告某些事件,因此, 只要運行腳本的計算機設置為正確的時間 ,您的代碼就應該可以正常工作。
我想如果您真的想讓一堆計算機同時都發出警報(您正在編寫病毒嗎?只是在開玩笑),並且想處理設備時鍾設置不正確的情況,可以讓它們呼叫中央時間服務器,並據此設置您的超時時間。 然后,您可能必須處理跨站點問題,但是原則上,如果所有機器都同意與中央時間服務器進行對話並接受其數據,則可以執行此操作。
附錄
這是可能的工作方式。 假設您的腳本正在一堆機器上運行。 他們的時鍾都錯了。 也許他們故意弄錯了時間。 也許他們不小心弄錯了時間。 但是您希望他們都同時發出警報。
因此,腳本應該執行以下操作:對服務器進行Ajax調用,這是與提供嵌入腳本的HTML頁面的服務器相同的服務器,以簡化跨站點問題。 該呼叫與您的服務器對話,后者知道實時信息。 現在您還知道從現在到警報時間的時間。 因此,請在您的服務器上減去這兩個值,然后將該數字傳遞回客戶端。 然后客戶做
setTimeout(theAlertFunction, theValueReturnedFromTheAjaxCall)
而且你很好。
如果用戶系統的日期設置錯誤,那么您將無能為力,如果您忽略這種情況,則可以在任何系統中獲取服務器時間戳的正確時間。
您可以在任何時區從UTC偏移時間,並將其添加到您的時間戳Bingo中!
var d = new Date();
var yourCorrectDate = new Date(timeNow +(d.getTimezoneOffset() * 60000));
// timenow is the time your server has sent
給你偏移量
d.getTimezoneOffset()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.