2017-06-06 97 views
1

我有一個PHP頁面和一個數據庫中,我瞭解以下內容:與時區計算時差

  • 服務器時間(服務器上運行PHP & DB)
  • 用戶時區
  • 日期/事件的時間存儲在數據庫中

我的系統允許用戶取消一個事件(蓋上一定的時間),並且我需要確定事件是否在12小時內基於用戶的時間當前時區。例如,假設我有以下幾點:

  • 服務器時間(GMT):2017年7月1日@ 3:30 PM
  • 用戶的時區:(GMT -7:00)山地時間(美國&加拿大)事件的
  • 日期/時間:2017年7月1日@ 8:30 PM(山地時間)

什麼是PHP的公式來計算基於用戶的當前時間和事件時間之間的時間他們已知的時區?注意:我們在不同時區有很多用戶,但我們知道他們的時區,因爲我們將其存儲在每個用戶的數據庫記錄中。爲了解決這個問題,我們首先需要通過計算服務器時間和他們的時區來計算用戶的當前時間。然後我們需要在當前時間和事件時間之間進行減法。

我正在存儲的時區值是這種格式的小數:-7.0(即山區時間,比格林尼治標準時間晚7小時)。無論發生什麼時區計算都需要能夠取得像這樣的小數。

這是什麼PHP代碼?

+0

在StackOverflow上,你需要編寫自己的代碼,如果有什麼不工作,我們會很樂意幫你修復它,但是你需要自己研究和編寫大部分代碼。 – Qirel

+0

查看[IntlCalendar](http://php.net/manual/en/class.intlcalendar.php),如果可以的話就使用它! – Code4R7

回答

0

這樣使用PHP的DateTime類的DIFF()方法: -

$user_time= new DateTime('.....',new DateTimeZone('Pacific/Nauru')); 
$event_time= new DateTime('....',new DateTimeZone('Pacific/Nauru')); 
var_dump($event_time->diff($user_time)); 

這會給你一個DateInterval對象: -

object(DateInterval)[48] 
    public 'y' => int 0 
    public 'm' => int 0 
    public 'd' => int 2 
    public 'h' => int 11 
    public 'i' => int 34 
    public 's' => int 41 
    public 'invert' => int 0 
    public 'days' => int 2 

檢索所需的值從微不足道。

+0

Omis看起來很有希望,但時區必須考慮到等式中才能獲得正確的$ user_time。這是如何完成的? – HerrimanCoder

+0

我將編輯我的答案,以便您可以看到包括時區在內的變化 –

+0

我什麼也沒得到空白:'$ user_time = new DateTime('2017-05-22 13:48:20',new DateTimeZone('Pacific /瑙魯「)); $ event_time = new DateTime('2017-05-22 02:48:20'); echo「

"; var_dump($event_time->diff($user_time)); echo "
」;' – HerrimanCoder