За последние 24 часа нас посетили 22555 программистов и 1046 роботов. Сейчас ищут 695 программистов ...

php, MySql и время

Тема в разделе "PHP для новичков", создана пользователем savsoft, 2 фев 2018.

Метки:
  1. savsoft

    savsoft Активный пользователь

    С нами с:
    1 фев 2017
    Сообщения:
    96
    Симпатии:
    2
    Всем привет!

    Есть база данных MySql с таблицами с полями TIME. Это для расписания. Не могу понять
    почему

    $row["TimeBegin"] == 0 true для времени от '00:00:00' до '01:00:00'. То есть при времени в базе данных '00:59:00' это сравнение true. Понятно, что === будет false, но почему, если время меньше часа, то не срабатывает.

    Не пинайте сильно, я только начал разбираться с php.
     
  2. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.072
    Симпатии:
    1.236
    Адрес:
    там-сям
    @savsoft это особенность PHP. все значения поступают из базы в скрипт как строки.

    '00:00:00' это не время, это строка. когда ты сравниваешь строку с числом в ПХП, он пытается сначала вычислить из строки число. для этого он тупо берет первые символы, пока они могут интерпретироваться как число, а хвост отбрасывается.
    Код (Text):
    1. C:\>php -r "var_dump('  03 abracadabra' == 3);"
    2. bool(true)
    то есть как-то так приводится к числу:
    '00:00:00' => 0
    '00:00:01' => 0
    '08:00:00' => 8
    '01abracadabra' => 1
    и т.д.

    правильно работать со временем или датой можно ЯВНО преобразовав строку либо в таймстамп (число), либо в класс DateTime
    например так:
    PHP:
    1. <?php
    2. var_dump(strtotime('00:01:00') - strtotime('today')); // int(60) -- то есть время в секундах
    --- Добавлено ---
    https://php.ru/forum/threads/rabota-s-datoj-v-mysql-php-zagotovka-faq.50838/
     
    savsoft нравится это.
  3. savsoft

    savsoft Активный пользователь

    С нами с:
    1 фев 2017
    Сообщения:
    96
    Симпатии:
    2
    Спасибо, с этим разобрался. Буду разбираться дальше.