PHP - а можно время вычитать или cравнивать?

MASe
На сайте с 17.09.2002
Offline
219
1284

Здравствуйте...

Заранее прошу не пинать за такие "ламерские" вопросы - так PHP и не осилил...

Тем не менее вопрос задам, может посоветуете что-нибудь...

Для начала - чем вызван вопрос...

Есть массив данных (можно как массив в самом файле php, можно как отдельный текстовый файл - там всего около 30 строк):

16:00; текст 1

16:15; текст 2

17:35; текст 3

....

21:00; текст N

Задача:

в зависимости от текущего времени вывести определенное количество "текстов" (3-4), у которых время больше больше заданного... ну а если эти "большие" времена последние в массиве и "не умещаются" в 3-4 - вывести первые из массива...

т.е. при заданном кол-ве выводимых текстов = 2, и текущем времени 15:00, нужно вывести тексты 1 и 2

а при том же кол-ве выводимых текстов = 2, и текущем времени 20:00, нужно вывести тексты N и 1

кол-во выводимых текстов постоянно и задается изначально в переменной...

причем вывод "неумещающихся" текстов вторичен... им в принципе можно пренебречь...

Вопрос:

можно ли в PHP сравнивать "математически" текущее время и время из массива в формате "16:00"??

или для этого придется в массиве разделять часы и минуты и сравнивать их по отдельности?

есть ли какая-то альтернатива решения подобной задачи другими способами?

буду благодарен за любую подсказку

Only God Can Judge Me... Nobody Else... Дрезна (http://www.drezna.ru/) Помощники: Sape (http://www.sape.ru/r.167724536c.php)
iamsens
На сайте с 26.08.2009
Offline
115
#1
Assassiny
На сайте с 05.07.2010
Offline
61
#2

Вижу как-то так, где-то накосячил, не могу понять где:

<?php
$postingtime[1]['hours']=13; // время постинга - Часы, двумерный массив.
$postingtime[1]['minutes'] =39;// время постинга - минуты
echo $postingtime[1]['hours'].":".$postingtime[1]['minutes'];// заданное время первого постинга, для наглядности вписал.
$timehours=date("H");// текущее время в часах
$timehours=settype($timehours,integer);// приведение строки к integer
$timeminutes=date("i");
$timeminutes=settype($timeminutes,integer);
$postingtime[2]['hours']=13; // время постинга - Часы, для второго задания постинга.
$postingtime[2]['minutes'] =39;// время постинга - минуты
if ($postingtime[1]['hours']==$timehours){//если в часах время одинаковое
if($postingtime[1]['minutes'] <= $timeminutes){ // сравниваем минуты
echo "Статьи";
}
}
if ($timehours>$postingtime[1]['hours'])// если текущее время в часах больше заданного, постим.
{
echo "Запрос в базу и вывод статей";
}
if ($postingtime[2]['hours']==$timehours){//если в часах время одинаковое
if($postingtime[2]['minutes']<= $timeminutes){
/* сравниваем минуты, если минут у постинга меньше или столько же сколько у минут текущего времени, постим*/
echo "Статьи2";
}
}
if ($timehours>$postingtime[2]['hours'])
{
echo "запрос в базу и вывод других статей";
}
?>

P.S пхп изучаю недавно, так что не пинать. Насчёт вывода заданного количества статей уже другой вопрос. Но раз арифмитические действия, как я увидел в постах ниже, можно выполнять сразу же,то половина кода не нужна вовсе.

[umka]
На сайте с 25.05.2008
Offline
456
#3

Если нужны математические операции (вычитание и пр)

http://php.net/manual/ru/function.strtotime.php

Лог в помощь!
Molodtsov
На сайте с 12.05.2008
Offline
134
#4

Алгоритмически для любого языка можно сравнить 16:00 и 17:00 как обычные строки и ответу будет верным 17-00 больше чем 16-00

Лучшие новостные (СМИ) и тематические площадки. ЯндексНовости, анонсы. ( https://searchengines.guru/ru/forum/936645 ) Прайс на размещение яндекс-диск ( https://yadi.sk/d/7QwCzDaqdxxsq ). E-mail: razmesti@mail.ru Skype: igor_molodtsov
MASe
На сайте с 17.09.2002
Offline
219
#5

ребят сорри, мануалы читал - не нашел объяснений (и не понимаю многого, и по английски примеры описаны)

Molodtsov:
Алгоритмически для любого языка можно сравнить 16:00 и 17:00 как обычные строки и ответу будет верным 17-00 больше чем 16-00

да... это верно - сравнение фактическое работает, однако...


$nowtime = date("H:i"); // == 13:30
$newtime1 = "13:01"; // == меньше на 29 минут в пределах часа
$newtime2 = "13:59"; // == больше на 29 минут в пределах часа
$newtime3 = "14:37"; // == больше в другом часе

$delta1 = $newtime1 - $nowtime;
$delta2 = $newtime2 - $nowtime;
$delta3 = $newtime3 - $nowtime;

echo ($nowtime." = текущее время<br>");
echo ($newtime1." = время 1, меньше на 29 минут в пределах часа<br>");
echo ($newtime2." = время 2, больше на 29 минут в пределах часа<br>");
echo ($newtime3." = время 2, больше в другом часе<br>");

echo ("<br><br>");

if ($nowtime < $newtime1) echo ("исходное время меньше времени 1<br>");
if ($nowtime < $newtime2) echo ("исходное время меньше времени 2<br>");
if ($nowtime < $newtime3) echo ("исходное время меньше времени 3<br>");

echo ("<br><br>");

if ($nowtime < $newtime1) echo ("время 1 больше текущего на = ".$delta1."<br>");
if ($nowtime < $newtime2) echo ("время 2 больше текущего на = ".$delta2."<br>");
if ($nowtime < $newtime3) echo ("время 3 больше текущего на = ".$delta3."<br>");

сравнение справедливо получаю, однако дельта...


исходное время меньше времени 2
исходное время меньше времени 3

время 2 больше текущего на = 0
время 3 больше текущего на = 1

а где минуты???

MA
На сайте с 16.10.2009
Offline
29
#6

текстовые строки складываете, а хотите время на выходе получить

с типами данных разберитесь вначале: http://php.su/learnphp/datatypes/


<?
$nowtime = time(); // == 13:30
$newtime1 = $nowtime - 29 * 60; // == меньше на 29 минут в пределах часа
$newtime2 = $nowtime + 29 * 60; // == больше на 29 минут в пределах часа
$newtime3 = $newtime2 + 38 * 60; // == больше в другом часе

$delta1 = $newtime1 - $nowtime;
$delta2 = $newtime2 - $nowtime;
$delta3 = $newtime3 - $nowtime;

echo (strftime('%H:%M', $nowtime) . " = текущее время<br>");
echo (strftime('%H:%M', $newtime1) . " = время 1, меньше на 29 минут в пределах часа<br>");
echo (strftime('%H:%M', $newtime2) . " = время 2, больше на 29 минут в пределах часа<br>");
echo (strftime('%H:%M', $newtime3) . " = время 2, больше в другом часе<br>");

echo ("<br><br>");

if ($nowtime < $newtime1)
echo ("исходное время меньше времени 1<br>");
if ($nowtime < $newtime2)
echo ("исходное время меньше времени 2<br>");
if ($nowtime < $newtime3)
echo ("исходное время меньше времени 3<br>");

echo ("<br><br>");

if ($nowtime < $newtime1)
echo ("время 1 больше текущего на = " . $delta1 / 60 . "<br>");
if ($nowtime < $newtime2)
echo ("время 2 больше текущего на = " . $delta2 / 60 . "<br>");
if ($nowtime < $newtime3)
echo ("время 3 больше текущего на = " . $delta3 / 60 . "<br>");
?>
Ищу площадки без бирж под размещение статей Тематика: ландшафтный дизайн, садоводство, комнатные растения, дача и участок.
MASe
На сайте с 17.09.2002
Offline
219
#7

все... теперь в голове сложилась картина + информация из мануалов...

спасибо всем

Molodtsov
На сайте с 12.05.2008
Offline
134
#8

когда происходит вычитание

$delta1 = $newtime1 - $nowtime;

$delta2 = $newtime2 - $nowtime;

$delta3 = $newtime3 - $nowtime;

тут в переменных записано время. пхп не умеет работать с временем так просто, только с числами. поэтому все что после : отбрасывается

MA
На сайте с 16.10.2009
Offline
29
#9

time() возвращает int - количество секунд

соответственно, к значению применимы арифметические операции

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий