За последние 24 часа нас посетили 19790 программистов и 1696 роботов. Сейчас ищут 1808 программистов ...

сравнеие переменых (string) как даты

Тема в разделе "Вопросы от блондинок", создана пользователем nimistar, 9 июн 2007.

  1. nimistar

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

    С нами с:
    30 май 2007
    Сообщения:
    919
    Симпатии:
    0
    ту в одной теме увидел сравнение двух дат который как стринг добавлены!
    решил сам поэксперементировать:
    PHP:
    1.  
    2. $dmin='2007-05-17';
    3. $dmax='2007-05-18';
    4. Echo "<pre>",var_dump($dmin),var_dump($dmax),"</pre>";
    5. if($dmin<$dmax){echo "сработало</br>\r\n";}else{echo "НЕ сработало</br>\r\n";}
    6.  
    7. $dmin_=(int)$dmin;
    8. $dmax_=(int)$dmax;
    9. Echo "<pre>",var_dump($dmin_),var_dump($dmax_),"</pre>";
    10. if($dmin_<$dmax_){echo "сработало</br>\r\n";}else{echo "НЕ сработало</br>\r\n";}
    11.  
    12.  
    13. $dmin_=strtotime($dmin);
    14. $dmax_=strtotime($dmax);
    15. Echo "<pre>",var_dump($dmin_),var_dump($dmax_),"</pre>";
    16. if($dmin_<$dmax_){echo "сработало</br>\r\n";}else{echo "НЕ сработало</br>\r\n";}
    17.  
    18.  
    так вот - я непонял как проходит первое сравнение?! вроде же должно было к инту привестись ... аля вариант два ... но срабатывает как третий! почему ?
     
  2. armadillo

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

    С нами с:
    6 апр 2007
    Сообщения:
    2.380
    Симпатии:
    0
    Адрес:
    Russia, Moscow
    echo (int)$dmin;
     
  3. nimistar

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

    С нами с:
    30 май 2007
    Сообщения:
    919
    Симпатии:
    0
    armadillo
    и?

    вот результат работы данного кода:
    HTML:
    1.  
    2. string(10) "2007-05-17"
    3. string(10) "2007-05-18"
    4.  
    5. сработало
    6.  
    7. int(2007)
    8. int(2007)
    9.  
    10. НЕ сработало
    11.  
    12. int(1179345600)
    13. int(1179432000)
    14.  
    15. сработало
    16.  
     
  4. dark-demon

    dark-demon Активный пользователь

    С нами с:
    16 фев 2007
    Сообщения:
    1.920
    Симпатии:
    1
    Адрес:
    леноград
    почему? о_0
     
  5. nimistar

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

    С нами с:
    30 май 2007
    Сообщения:
    919
    Симпатии:
    0
    dark-demon
    дык, в мануале так написано .... а как иначе!
     
  6. armadillo

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

    С нами с:
    6 апр 2007
    Сообщения:
    2.380
    Симпатии:
    0
    Адрес:
    Russia, Moscow
    на результат приведение даты к инту посмотрел? не помогло?
     
  7. nimistar

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

    С нами с:
    30 май 2007
    Сообщения:
    919
    Симпатии:
    0
    armadillo
    дык .... я же как раз и написал код дабы посмотреть что и к чему ...
    (строки 6,7 и результат на приведенных данных строка 7)

    то-есть, не помогло!
     
  8. dark-demon

    dark-demon Активный пользователь

    С нами с:
    16 фев 2007
    Сообщения:
    1.920
    Симпатии:
    1
    Адрес:
    леноград
    nimistar, и где ты тут увидел числовые строки? =^_^=
     
  9. nimistar

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

    С нами с:
    30 май 2007
    Сообщения:
    919
    Симпатии:
    0
    dark-demon
    можно подробнее?

    я тя непонял ...

    я как раз спрашиваю по каким правилам происходит сравнение?

    все что я нашел на эту тему в цитате выше ....
     
  10. dark-demon

    dark-demon Активный пользователь

    С нами с:
    16 фев 2007
    Сообщения:
    1.920
    Симпатии:
    1
    Адрес:
    леноград
    по правилам сравнения строк...
     
  11. Петр

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

    С нами с:
    20 мар 2006
    Сообщения:
    1.253
    Симпатии:
    0
    Адрес:
    Центр Вселенной
    скрока -> mktime() -> сравнивать таймстампы.
     
  12. nimistar

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

    С нами с:
    30 май 2007
    Сообщения:
    919
    Симпатии:
    0
    dark-demon - издеваешся ?
    Петр - я привел код в первом посте ... в третьем его результат ... я спрашивал не то как это надо сделать ... а почему !
     
  13. dark-demon

    dark-demon Активный пользователь

    С нами с:
    16 фев 2007
    Сообщения:
    1.920
    Симпатии:
    1
    Адрес:
    леноград
    nimistar, тормозишь? чо те не понятно-то?
     
  14. Петр

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

    С нами с:
    20 мар 2006
    Сообщения:
    1.253
    Симпатии:
    0
    Адрес:
    Центр Вселенной
  15. nimistar

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

    С нами с:
    30 май 2007
    Сообщения:
    919
    Симпатии:
    0
    dark-demon,Петр - и все таки?!

    то что торможу - возможно ...

    и так ... я всегда сам приводил типы (особенно при датах) в пхп3 распарсивал, в 4 уже функциями преобразовывал ... что делаю и сейчас, но тут на форуме увидел сравнение без приведения типов ... удивился попробовал ... результат ошарашил ... в мануале ничего не нашел (кроме выше приведенной фразы) ... все знакомые до сих пор преобразовывают даные...

    вот интересуюсь у вас ... откровенно говоря ни тон ответов, ни форма, ни содержание пока не радуют!

    (насчет !== и === все ясно ... и никаких вопросов, но вот вопросы по поводу > и < остались... неужели ПХП5 сам распознает иприводит типы или побайтовое сравнение, ну не нашел я никакой инфы на эту тему!)
     
  16. Sergey89

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

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    PHP:
    1. <?php
    2.     $dmin = '05-09';
    3.     $dmax = '06-09';
    4.  
    5.     function str_ord($str) {
    6.         $str_ord = '';
    7.         for ($i = 0; $i < strlen($str); $i++) {
    8.             $str_ord .= ord($str{$i});
    9.         }
    10.         return $str_ord;
    11.     }
    12.  
    13.     print str_ord($dmin) . ' - ' . str_ord($dmax) . ' = ' . (str_ord($dmin) - str_ord($dmax));
    14. ?>
    Посмотри результат работы при разных значениях дня и месяца.
     
  17. dark-demon

    dark-demon Активный пользователь

    С нами с:
    16 фев 2007
    Сообщения:
    1.920
    Симпатии:
    1
    Адрес:
    леноград
    nimistar, и что тебя смущает в том, что даты записанные в этой (и исключительно этой) форме можно сравнивать как строки? специально для этого такой кривой формат и придумали...
     
  18. nimistar

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

    С нами с:
    30 май 2007
    Сообщения:
    919
    Симпатии:
    0
    Sergey89 - супер ... это я и спрашивал!


    dark-demon - нет меня вообще смущало сравнение стриногов, на больше и меньше! (никак немогу найти правила по этому поводу)
     
  19. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    nimistar
    там все просто. сравнение от первого до последнего символа попарно из первой и второй строки
    у какой строки ASCII-код символа будет меньше кода символа соответствующей позиции второй строки та строка и меньше.
    так же сравнение может быть регистронезависимым с соответствующим возвращением равенства двух сиволов разного регистра
     
  20. stas_t

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

    С нами с:
    24 апр 2007
    Сообщения:
    500
    Симпатии:
    0
    Адрес:
    Courbevoie, France
    nimistar
    если даты указаны в формате ГГГГ-ММ-ЧЧ, то по правилам сравнивания строк "2006-02-12" будет меньше "2006-10-30", что, по моему мнению, абсолютно логично. данная техника работает и в пхп 4 и в пхп 3 и не требует абсолютно никакого приведения дат. именно поэтому формат, выбранный для хранения дат в мускуле такой удобный.
     
  21. nimistar

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

    С нами с:
    30 май 2007
    Сообщения:
    919
    Симпатии:
    0
    stas_t - следствия понятны! я спрашивал только правилах сравнения! .... в принципе, то что он сравнивает даты ... я увидел ... было интересно более точное описание действия! за что спасибо Ganzal и Sergey89!


    в принципе для закрытия топика нехватает только ссылки на эти правил (то что искал и не нашел!) ;-)