2010-11-02 97 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*/ }