2010-11-02 99 views
0

在php中,我得到這種格式的變量$ date_time - 11-01-2010 20:48:25。這一次是GMT時間。我有2小時的靈活性,如果超過2小時,我必須拒絕。我在美國東部時間,但是我想根據格林威治標準時間進行檢查,以便在時差中沒有錯誤。我如何在我的php代碼中設置GMT以及如何檢查2小時靈活時差?像這個例子那樣,在11-01-2010 18:48:2511-01-2010 22:48:25之間的任何時間都是可以接受的。如果$ date_time是11-01-2010 23:48:23,它也會成爲問題嗎?檢查時間差在24小時

澄清

我做一個$date_time=$_GET['date_time'];。然後我需要檢查這個新的$ date_time是否在當前GMT時間的2小時範圍內。如果它在範圍內,那麼我將繼續執行該代碼,否則我將顯示錯誤或執行其他操作。我想知道我將如何檢查這個$ date_time變量的2小時範圍。

+0

我真的不得到這個問題。你是否要求增加兩個小時的時間()? – Shoe 2010-11-02 18:00:07

+0

希望我現在說得更清楚。 – 2010-11-02 18:05:06

+1

'11-01-2010'的格式是 - mm/dd/yyyy還是dd/mm/yyyy? – 2010-11-02 18:05:23

回答

3

這是一種如何將時間格式轉換成UNIX timestamp

$date = strptime($date_time, "%m-%d-%Y %T"); 
$ut = mktime($date['tm_hour'], $date['tm_min'], $date['tm_sec'], 1 + $date['tm_mon'], $date['tm_mday'], 1900 + $date['tm_year']); 

$now = time(); 

if($ut >= $now && $ut <= ($now + 7200)) { // 7200 = 2 * 60 * 60 seconds 
    // allowed 
} 

參考:strptimemktime,time

注意:time()始終以UTC(不考慮時間設置)返回UNIX時間戳。因此,這假設$date_time時間戳是GMT時間的

Working example(當然,您必須提供有效的GMT時間爲$date_time)。

注2:如果輸入的時間是不是在GMT,您可以設置時區與date_default_timezone_set(影響mktime但不time)。

Working example(其他城市的時間和相應的時區)

+0

工程就像一個魅力。謝謝 :) – 2010-11-02 19:27:48

1

如果您對PHP> 5.3運行時,您可以使用日期時間爲這樣:

$my_date = "11-01-2010 20:48:25"; 

$date = DateTime::createFromFormat('m-d-Y H:i:s', $my_date); 
$date_lower = DateTime::createFromFormat('m-d-Y H:i:s', $my_date); 
$date_upper = DateTime::createFromFormat('m-d-Y H:i:s', $my_date); 
$date_lower->sub(new DateInterval('PT2H')); 
$date_upper->add(new DateInterval('PT2H')); 

var_dump($date >= $date_lower && $date <= $date_upper); // bool(true) 

我覺得它更具可讀性。

如果需要,您還可以使用其他時區,檢查createFromFormat的第三個參數。

+0

我使用的是php 5.2.14。我應該提到。謝謝你的努力。 – 2010-11-02 19:28:21

1

如果PHP> = 5.3(你有一個嚴重的怪異格式BTW):

date_default_timezone_set('EST'); 
$inputtime = DateTime::createFromFormat('m-d-Y H:i:s','11-01-2010 20:48:25',new DateTimeZone("GMT")); 
$diff = $inputtime->getTimestamp() - time(); 
if(abs($diff) > 7200){ 
    //more then 2 hours difference. 
} 
+0

我正在使用PHP 5.2.14。我應該提到。謝謝你的努力。 – 2010-11-02 19:29:05

0

我建議你從來沒有通過的時間和日期與格式字符串。稍後再轉換它。您只需將時間戳作爲get變量傳遞,然後在腳本中對其進行格式化即可。 這是最好的解決方案,也是最乾淨的。

然後使用下面的代碼:

$flexibility = X seconds; 
if ($date_time < time() - $flexibility or $date_time > time() + $flexibility) 
{ /*Error*/ }