Проверьте, находится ли время в определенном диапазоне - PullRequest
0 голосов
/ 29 апреля 2020

Я использую php 7.4 и создаю функцию, которая должна проверять определенные условия, такие как:

  • Проверьте, были ли xx Минуты - $timeToLastPostinMinutes - прошло, пока не начнется процесс расписания
  • Сегодня допустимый день
  • Сегодня временной интервал, который находится в допустимом диапазоне
  • Если все условия выполнены, то вернуть Datetime с xx добавлено минут

Я создал следующую функцию, которая должна проверить два условия выше:

<?php

/**
 * Weekdays: [1, 2, 3, 4, 5, 6, 7],
 * Times are as an array specified, from-to: [["09:00", "11:00"], ["18:00", "24:00"]],
 * TimeTolastPost example 15 for 15 minutes
 * @param Datetime $lastPostdateTime
 * @param $weekdays
 * @param $times
 * @param $timeToLastPostinMinutes
 * @throws Exception
 */
function createPostSchedule(Datetime $lastPostdateTime, $allowedWeekdays, $allowedTimes, $timeToLastPostinMinutes, $timeToWaitInMin)
{
    $today = new DateTime();

    // if $lastPostdateTime is x Minutes ($timeToWaitInMin) in the past, then start the schedule process
    if ($lastPostdateTime->add(new DateInterval('PT' . $timeToWaitInMin . 'M'))->getTimestamp() > $today->getTimestamp()) {
        $today->format('N');
        // check if today is in the day array
        if(in_array(intval($today->format('N')), $allowedWeekdays)) {
            // check if time is in the slot
            foreach ($allowedTimes as $key => $val) {
                if (strtotime($val[0]) > $today->getTimestamp() && strtotime($val[1]) < $today->getTimestamp()) {
                    if($timeToLastPostinMinutes != 0) {
                        return $lastPostdateTime->add(new DateInterval('PT' . $timeToLastPostinMinutes . 'M'));
                    }
                }
            }
        }
    }
}

$dateTime = DateTime::createFromFormat('m-d-Y H:i:s', '10-16-2020 15:55:33');

$postSchedule = createPostSchedule($dateTime, [1, 2, 3, 4, 5], [["09:00", "24:00"]], 15, 1440);

echo $postSchedule->format('Y-m-d H:i:s');

Однако я получаю null назад.

Я думаю, что может быть проблема в сравнении временных интервалов. Тем не менее, они сравнивают две метки времени друг с другом, что кажется правильным?

Любые предложения, почему я получаю null обратно?

Я ценю ваши ответы!

1 Ответ

1 голос
/ 29 апреля 2020

Вы сравниваете начало и конец каждого временного интервала с одним и тем же значением - текущая временная метка. Совершенно очевидно, что текущая временная метка не может быть ниже начала временного интервала и выше конца временного интервала одновременно. Вам нужно отменить сравнение:

if (strtotime($val[0]) < $today->getTimestamp() && strtotime($val[1]) > $today->getTimestamp())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...