在php中,我以这种格式获取变量$ date_time - 11-01-2010 20:48:25
。这个时间是格林尼治标准时间。我有2小时的灵活性,如果超过2小时,我必须拒绝它。我在EST设置,但我想仅根据GMT进行检查,以便时差不会出错。如何在我的PHP代码中设置为GMT,如何检查2小时灵活的时差?与此示例一样,11-01-2010 18:48:25
和11-01-2010 22:48:25
之间的任何时间都可以接受。如果$ date_time是11-01-2010 23:48:23
?
澄清
我正在做$date_time=$_GET['date_time'];
。然后我需要检查这个新的$ date_time是否在当前GMT时间的2小时范围内。如果它在范围内,那么我将继续执行该代码,否则我将显示错误或做其他事情。我想知道如何检查这个$ date_time变量的2小时范围。
答案 0 :(得分: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
}
注意: time()
始终以UTC格式返回UNIX时间戳(无论时间设置如何)。因此,假设$date_time
时间戳 是GMT时间。
Working example(当然,您必须为$date_time
提供有效的GMT时间。)
注2:如果输入时间不是GMT,您可以使用date_default_timezone_set
设置时区(影响mktime
但不影响time
)。< / p>
Working example(相应地更改时间和时区)
答案 1 :(得分:1)
如果你运行PHP&gt; 5.3,您可以使用DateTime:
$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的第三个参数。
答案 2 :(得分:1)
如果PHP&gt; = 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.
}
答案 3 :(得分:0)
我建议你永远不要用格式字符串传递时间和日期。稍后再转换它。您只需将时间戳作为get变量传递,然后在脚本中对其进行格式化。 这是最好的解决方案,也是最干净的解决方案。
然后使用以下代码:
$flexibility = X seconds;
if ($date_time < time() - $flexibility or $date_time > time() + $flexibility)
{ /*Error*/ }