#php #mysql #date
#php #mysql #Дата
Вопрос:
Мне нужно проверить, находятся ли текущая дата и время между двумя будними днями, которые включают время (от и до). В БД может быть несколько записей, и дни недели хранятся через PHP date(‘N’), где с 1 (для понедельника) по 7 (для воскресенья), а также час — минута хранятся через time .
Например, сохраненное правило может быть следующим: week_day_from: 5 (пятница) week_hour_from: 16:00:00 week_day_to: 7 (воскресенье) week_hour_to: 18:00:00
или даже week_day_from: 7 (воскресенье) week_hour_from: 10:00:00 week_day_to: 2 (вторник) week_hour_to: 12:00:00
Как я могу определить, применяется ли текущий день / время в одном из правил? Основная идея состоит в том, чтобы скрыть некоторые результаты, если применяется одно из правил (т.е. Не показывать этот прием пищи после 16:00 пятницы и до 18:00 воскресенья).
заранее благодарю вас
Ответ №1:
Функция getdate предоставит вам более точную информацию. Функция getDate() вернет массив, содержащий информацию о дне недели и времени. Имея интервал, вы можете определить, применяется ли он.
Комментарии:
1. Спасибо за ваш ответ, да, strtotime применяется для текущей даты / времени, но как я могу применить это для каждого заданного правила, которое не является конкретной датой (т. Е. Каждую пятницу или каждый понедельник)?
2. Я согласен, тогда getdate предоставит вам более точную информацию. Функция getDate() вернет массив, содержащий информацию о дне недели и времени.
3. Используя getDate, вы знаете, какой сегодня день, номер секунды с 1970 года и какой сейчас день недели. Затем вы можете рассчитать, используя количество секунд, если оно находится в пределах диапазона, указанного вами выше.
4. Моя проблема заключалась в том, чтобы определить диапазон, текущий день недели и секунды с 1970 года на сегодняшний день — это не проблема. Хитрость заключалась в том, чтобы получить диапазон дней недели (от — до) из базы данных и применить в соответствии с текущим днем / датой. Мой подход к псевдо-датам до сих пор работает нормально, я использовал strtotime, так как был с ним хорошо знаком. Я попробую использовать подход getDate и отчитаюсь. Спасибо тебе, Скайуокер
Ответ №2:
кое-что нашел….
пришлось создать псевдодаты, чтобы использовать strtotime и сравнивать с текущим временем даты. Псевдодаты создаются с помощью условий, как показано ниже, которые прокомментированы для описания моей логики.
Я бы гораздо лучше предпочел решение на основе запросов MySQL, а не извлекать все правила и сравнивать, но я не могу найти способ. Я был бы признателен, если бы вы проверили мой код и сказали мне, что вы думаете. Недостаток может быть возможен…
$daynow = date("N"); //$daynow = 7;
$datetimenow = date("d-m-Y G:i:s");
if($row['week_day_from'] > $row['week_day_to'])
{// case from saturday(6) to thursday(4)
if($daynow == 7)
{
$check_from = date("d-m-Y", strtotime("Sunday ".$row['week_day_from']." Days - 1 week"));
$check_to = date("d-m-Y", strtotime("Sunday ".$row['week_day_to']." Days"));
}
else
{
$check_from = date("d-m-Y", strtotime("Sunday ".$row['week_day_from']." Days - 2 week"));
$check_to = date("d-m-Y", strtotime("Sunday ".$row['week_day_to']." Days - 1 week"));
}
}
else
{// case from thursday(4) to saturday(6)
if($daynow == 7)
{
$check_from = date("d-m-Y", strtotime("Sunday ".$row['week_day_from']." Days"));
$check_to = date("d-m-Y", strtotime("Sunday ".$row['week_day_to']." Days"));
}
else
{
$check_from = date("d-m-Y", strtotime("Sunday ".$row['week_day_from']." Days - 1 week"));
$check_to = date("d-m-Y", strtotime("Sunday ".$row['week_day_to']." Days - 1 week"));
}
}
if
(
strtotime($datetimenow) >= strtotime($check_from." ".$row['week_hour_from'])
AND
strtotime($datetimenow) <= strtotime($check_to." ".$row['week_hour_to'])
)
{
//RULE APPLIES
}