web-dev-qa-db-fra.com

Comment comparer deux fois dans PHP

J'ai eu deux fois dans le format comme 7:30:00 et 22:30:00 stockés dans les variables $resttimefrom et $resttimeto respectivement.

Je veux vérifier si l'heure actuelle est entre ces deux valeurs. Je vérifie cela avec le code

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

Mais je reçois toujours la $ stat comme Close. Qu'est-ce qui peut causer ça?

16
Rajasekar

Pour ce faire, une solution simple mais intelligente consiste à supprimer le ':' de vos dates.

$resttimefrom = 73000;
$resttimeto = 223000;

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

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

vous pouvez essayer d'utiliser strtotime 

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

puis vérifier

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

j'espère que cela peut vous aider ..

22
Zuber Surya

Essayez de les reformater en quelque chose que vous pouvez comparer comme ça. Par exemple, les nombres:

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

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

Vous comparez des chaînes.
Convertissez les chaînes de temps en horodatages avec strtotime() .
Ensuite, comparez avec time() .

3
Gordon
$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
3
quantumSoup

Convertissez simplement vos dates en timestamp Unix, comparez-les, vous avez vos résultats! Cela pourrait ressembler à quelque chose comme ça: 

$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";
} 
3
user395702

La fonction date renvoie une chaîne. La comparaison que vous effectuez est donc une comparaison de chaîne. Ainsi, 7:30 est supérieur à 22:30.

Il serait bien préférable d'utiliser mktime, qui renverra une valeur d'horodatage Unix (entier) pour une meilleure comparaison.

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

http://php.net/mktime

2
Jonathon Bolster

L'astuce pour manipuler et comparer les dates et les heures dans PHP est de stocker les valeurs de date/heure dans une variable entière et d'utiliser les fonctions mktime (), date () et strtotime (). La représentation entière d'une date/heure est le nombre de secondes écoulées depuis minuit, 1970-Jan-1, désigné sous le nom de «Époque». Une fois que votre date/heure est sous forme d’entier, vous pourrez la comparer efficacement à d’autres dates également sous forme d’entier.

Bien sûr, étant donné que vous recevrez probablement les valeurs de date/heure des demandes de page et des requêtes de sélection de base de données dont vous aurez besoin pour convertir votre chaîne de date/heure en un entier avant de pouvoir effectuer toute comparaison ou calcul arithmétique.

En supposant que vous soyez sûr que les variables $ resttimefrom et $ resttimeto contiennent du temps correctement formaté, vous pouvez utiliser la fonction strtotime () pour convertir le temps de votre chaîne en entier. strtotime () prend une chaîne au format date et la convertit en nombre de secondes depuis Epoch.

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

Note latérale: strtotime () renvoie toujours une date complète sous forme entière. Si votre chaîne n'a pas de date, seulement une heure, strtotime () renvoie la date du jour avec l'heure que vous avez indiquée dans la chaîne. Ce n'est pas important pour vous, cependant, car les deux dates retournées par strtotime () auront la même date et la comparaison des deux variables aura pour effet de comparer les deux heures car les dates s'annulent.

Lorsque vous comparez les deux nombres entiers, gardez à l'esprit que plus la date/heure est rapprochée, plus sa valeur entière sera petite. Donc si vous voulez voir si $ time_from est antérieur à $ time_to, vous auriez ceci:

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

Maintenant, pour comparer une date/heure avec la date/heure système actuelle, utilisez simplement mktime () sans paramètre pour représenter la date/heure actuelle:

if ($time_from < mktime())
{
    // $time_from is in the past
}
1
emurano
$Time1 = date_parse($time);
$seconds1 = $Time1['hour'] * 3600 + $Time1['minute'] * 60 + $Time1['second'];

$Time2 = date_parse($current_time);
$seconds2 = Time2['hour'] * 3600 + Time2['minute'] * 60 + Time2['second'];

$actula_time = $seconds1 - $seconds2;

echo floor($actula_time / 3600) .":". floor(($actula_time / 60)%60) .":".  $actula_time%60;
0
Raj Kumar
$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;
0
Sachin R