我有两次以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。可能导致什么?
答案 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);
答案 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说我做的是将所有时间转换为秒,然后将其与当前时间的总秒数进行比较