簡體   English   中英

在不同時區的不同設備上的Unix時間

[英]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是

  • 1970年1月1日,午夜,祖魯時間
  • 舊金山時間1969年12月31日下午4:00

因此,如果您安排在時間0發出警報,那么舊金山和倫敦的人們會同時看到該警報。 在任何Unix時間上都是同上的,實際上只是一個描述時間的數字。 世界各地的同一瞬間。 所以下面兩個日期時間字符串

  • 1970-01-01T00:00:00Z
  • 1969-12-31T16:00:00-0800

是同一時刻的表示,以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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM