Разместите свой проект бесплатно и начните получать предложения от фрилансеров-исполнителей уже спустя минуты после публикации!

Разрешить парадокс кода PHP

истекло время актуальности
PHP


Есть простая программа

<?

echo "Старт: ".date("Y-m-d H:m:s",time())."<br>";

$start = microtime(true); 

for($try = 1; $try < 3; $try++)

{

    $sleep = $try*$try*60;

    echo date("Y-m-d H:m:s",time() + round(microtime(true) - $start))." Задерживаем ".$sleep." сек".'    Время выполнения скрипта: '.round(microtime(true) - $start,3).' сек.'."<br>";

    sleep($sleep);

                

}

echo date("Y-m-d H:m:s",time() + round(microtime(true) - $start))."".'    Время выполнения скрипта: '.round(microtime(true) - $start,3).' сек.'."<br>";

echo date("Y-m-d H:m:s")."".'    Время выполнения скрипта: '.round(microtime(true) - $start,3).' сек.'."<br>";


По логике, она должна выполнятся  300 секунд и каждый раз распечатывать текущее системное время сервера. 

Она действительно выполняется ровно 300 секунд, но при этом каждый раз распечатывает системное время старта программы, а не текущее системное время:


Старт: 2019-05-10 10:05:00
2019-05-10 10:05:00 Задерживаем 60 сек Время выполнения скрипта: 0 сек.
2019-05-10 10:05:00 Задерживаем 240 сек Время выполнения скрипта: 60 сек.
2019-05-10 10:05:00 Время выполнения скрипта: 300 сек.
2019-05-10 10:05:00 Время выполнения скрипта: 300 сек.



Необходимо найти причину, ошибку в коде.



  1. ставка скрыта фрилансером
  2. 1 день120 ₴
    Дмитро
    Дмитро Лаврик
    3420   проверен    144  0   3

    Обращайтесь :) нашел.
    __________
    С уважением, Дмитрий Лаврик
    WWW: https://dl.sm.ua
    Facebook: https://www.facebook.com/dmytro.lavryk
    E-mail: [email protected]
    Skype: dmytro.lavryk
    Telegram: dlsumy
    Тел. (viber): +380506037953

    Украина Сумы | 10 мая в 10:35 |
  3. 1 день100 ₴
    Павло
    Павло Глухінчук
    1362   проверен    61  0

    Доброго дня! Готовий допомогти і вказати на причину, або скину готовий робочий код. Звертайтесь.

    Украина Умань | 10 мая в 10:41 |
  4.  фрилансер больше не работает на сервисе
  5. ставка скрыта фрилансером
  6. 1 день100 ₴
    Владимир
    Владимир Иванов
    867     26  0

    Здравствуйте. Пример выполнения в комментариях к ставкам. Связаться можно в ЛС или по скайпу/телеграмм midli7

    Украина Одесса | 10 мая в 11:36 |
  7.  фрилансер больше не работает на сервисе
  8. 1 день300 ₽
    Дмитрий
    Дмитрий Сергеевич
    630     16  0

    Y-m-d H:m:s везде замените Y-m-d H:i:s
    и будет вам счастье.
    У вас формат стоит Год-месяц-день Часы-МЕСЯЦ-секунды,
    а вам надо Год-месяц-день Часы-МИНУТЫ-секунды

    Украина Горловка | 10 мая в 14:51 |
  9. 1 день500 ₽
    German
    German Kokurkin
    133   

    Он считает время относительно старта скрипта т.к. он сначала продолжает код констатирует и потом выполняет а надо просто слиптайм прибавить к времени например или еще какие нибудь решения которые есть в моей голове

    Россия Москва | 11 мая в 07:19 |
  1. ставка отозвана
  • Василий Х.
    10 мая в 10:47 |

    Вы отнимаете в цикле от реального времени время старта + задержку. Само собой у вас и получается время старта

  • Василий Х.
    10 мая в 10:48 |

    date("Y-m-d H:m:s",time() + round(microtime(true) - $start))

    Ошибка тут

  • Юрий Жилин
    10 мая в 10:48 |

    убери round  - и будет тебе счастье )), тоже мне парадокс ))

  • Юрий Жилин
    10 мая в 11:03 |

    или так

    <?php
    $time_start = microtime(true);

    // Спим некоторое время
    usleep(100);

    $time_end = microtime(true);
    $time = $time_end - $time_start;

    echo "Ничего не делал $time секунд\n";
    ?>

  • Владимир Иванов
    10 мая в 11:50 |

    Пример выполнения скрипта

    Старт: 2019-05-10 11:44:36

    2019-05-10 11:44:36 Задерживаем 60 сек Время выполнения скрипта: 0 сек.
    2019-05-10 11:46:36 Задерживаем 240 сек Время выполнения скрипта: 60.002 сек.
    2019-05-10 11:50:36 Время выполнения скрипта: 300.001 сек.
    2019-05-10 11:49:36 Время выполнения скрипта: 300.001 сек.


    Ставку сделал.

  • Андрей Брус
    10 мая в 12:42 |

    Во-первых, формат даты «H:m:s» — это час - МЕСЯЦ - секунды.

    Правильный формат (если конечно, Вам нужны минуты) — «H:i:s».

  • Андрей Брус
    10 мая в 12:49 |

    Поскольку задержка кратна минуте (60 сек), то время каждый раз отличается только минутами, а вместо них у Вас месяц.

    Ну и

    date("Y-m-d H:i:s", time() + round(microtime(true) - $start))
    
    
    time() + round(microtime(true) - $start)

    здесь лишнее

    Достаточно

    date("Y-m-d H:i:s")


    Старт: 2019-05-10 12:47:41<br>
    2019-05-10 12:47:41 Задерживаем 6 сек Время выполнения скрипта: 0 сек.<br>
    2019-05-10 12:47:47 Задерживаем 24 сек Время выполнения скрипта: 6 сек.<br>
    2019-05-10 12:48:11 Время выполнения скрипта: 30 сек.<br>
    2019-05-10 12:48:11 Время выполнения скрипта: 30 сек.<br>

    Я у себя поменял 60 на 6 — мне влом столько ждать...

  • Андрей Брус
    10 мая в 12:50 |

    И никаких парадоксов...

  • Владимир Иванов
    10 мая в 13:00 |

    Получается тогда ваще вот так

    Старт: 2019-05-10 12:58:34
    2019-05-10 12:58:34 Задерживаем 6 сек Время выполнения скрипта: 0 сек.
    2019-05-10 12:58:40 Задерживаем 24 сек Время выполнения скрипта: 6 сек.
    2019-05-10 12:59:04 Время выполнения скрипта: 30.001 сек.