如何在PHP中比较两次

时间:2010-08-04 08:35:49

标签: php datetime

我有两次以7:30:00和22:30:00的格式分别存储在变量$resttimefrom$resttimeto中。

我想检查当前时间是否介于这两个值之间。我正在用代码

检查这个
$time = date("G:i:s");
if ($time > $resttimefrom and $time < $resttimeto ){
    $stat = "open";
} else {
    $stat = "close";
} 

但我总是把$ stat作为Close。可能导致什么?

11 个答案:

答案 0 :(得分:22)

一种简单而明智的方法是从日期中删除“:”。

$resttimefrom = 73000;
$resttimeto = 223000;

$currentTime = (int) date('Gis');

if ($currentTime > $resttimefrom && $currentTime < $resttimeto )
{
    $stat="open";
}
else
{
    $stat="close";
} 

答案 1 :(得分:22)

您可以尝试使用strtotime

$st_time    =   strtotime($resttimefrom);
$end_time   =   strtotime($resttimeto);
$cur_time   =   strtotime(now);

然后检查

if($st_time < $cur_time && $end_time > $cur_time)
{
   echo "WE ARE CLOSE NOW !!";
}
else{
   echo "WE ARE OPEN  NOW !!";
}

我希望这对你有帮助..

答案 2 :(得分:4)

尝试将它们重新格式化为可以比较的内容。例如,数字:

$resttimefrom = mktime(7,30,0);
$resttimeto = mktime(22,30,0);

$time = mktime(date('H'),date('i'),date('s'));

答案 3 :(得分:3)

您正在比较字符串 使用strtotime()将时间字符串转换为时间戳 然后与time()进行比较。

答案 4 :(得分:3)

$today = date("m-d-y ");
$now = date("m-d-y G:i:s");

if (strtotime($today . $resttimefrom) < $now && $now > strtotime($today . $resttimeto)) {
    $stat = 'open';
else
    $stat = 'close

答案 5 :(得分:3)

只需将日期转换为Unix时间戳,比较它们即可获得结果!它可能看起来像这样:

$time =date("G:i:s");

$time1 = strtotime($time); 
$resttimefrom1 = strtotime($resttimefrom );
$resttimeto1 = strtotime($resttimeto );
if ($time1 >$resttimefrom  and $time1 <$resttimeto)
{
    $stat="open";
}
else
{
    $stat="close";
} 

答案 6 :(得分:2)

date函数返回一个字符串,因此你所做的比较将是一个字符串比较 - 所以7:30将超过22:30

使用mktime会更好,它将返回一个Unix时间戳值(整数),以便更好地进行比较

$currentTime = mktime();
$resttimefrom = mktime(hour,min,second);

http://php.net/mktime

答案 7 :(得分:1)

在PHP中操作和比较日期和时间的技巧是将日期/时间值存储在整数变量中,并使用mktime(),date()和strtotime()函数。日期/时间的整数重复是自1970年1月1日午夜以来的秒数,其被称为“纪元”。一旦您的日期/时间是整数形式,您将能够有效地将其与其他整数形式的日期进行比较。

当然,因为您很可能从页面请求和数据库选择查询中接收日期/时间值,所以您需要将日期/时间字符串转换为整数,然后才能进行任何比较或算术。

假设您确定$ resttimefrom和$ resttimeto变量包含正确格式化的时间,您可以使用strtotime()函数将字符串时间转换为整数。 strtotime()接受一个格式化为日期的字符串,并将其转换为自纪元以来的秒数。

$time_from = strtotime($resttimefrom);
$time_to = strtotime($resttimeto);

旁注:strtotime()始终以整数形式返回完整日期。如果你的字符串没有日期,只有一个时间,strtotime()会返回今天的日期以及你在字符串中给出的时间。这对你来说并不重要,因为strtotime()返回的两个日期将具有相同的日期,并且比较这两个变量将具有比较两次所需的效果,因为日期相互抵消。

比较两个整数时请记住,日期/时间越早,其整数值就越小。因此,如果您想查看$ time_from是否早于$ time_to,那么您将拥有:

if ($time_from < $time_to)
{
    // $time_from is ealier than $time_to
}

现在将日期/时间与当前系统日期/时间进行比较,只需使用没有参数的mktime()来表示当前日期/时间:

if ($time_from < mktime())
{
    // $time_from is in the past
}

答案 8 :(得分:0)

$firstTime = '1:07';
$secondTime = '3:01';

list($firstMinutes, $firstSeconds) = explode(':', $firstTime);
list($secondMinutes, $secondSeconds) = explode(':', $secondTime);

$firstSeconds += ($firstMinutes * 60);
$secondSeconds += ($secondMinutes * 60);
$difference = $secondSeconds - $firstSeconds;

答案 9 :(得分:0)

// assuming PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION, otherwise error handling is missing....
// you might also be interested in http://docs.php.net/manual/en/pdo.begintransaction.php
$stmtSelect = $connection->prepare("SELECT `CustomerFirstName` FROM `auth` WHERE `matched` = ?");
$stmtInsert = $remote->prepare("INSERT INTO `cob_matched_records` (first) VALUES (?)");

$stmtSelect->execute( array($_POST['jobName']) );
foreach( $stmtSelect as $row ) {
    $stmtInsert->execute( array($row['cob_matched_records']) );
}

答案 10 :(得分:-4)

作为校长Shrapnel说我做的是将所有时间转换为秒,然后将其与当前时间的总秒数进行比较