За последние 24 часа нас посетили 54820 программистов и 1720 роботов. Сейчас ищут 895 программистов ...

Проверка валидности даты

Тема в разделе "PHP для новичков", создана пользователем vold, 13 окт 2013.

  1. vold

    vold Новичок

    С нами с:
    10 окт 2013
    Сообщения:
    23
    Симпатии:
    0
    Как написать код правильно, чтобы Переменная сравнивалось (проверялось) с форматом даты dateFormat: 'Y-mm-dd'}, То есть переменная должен иметь вид 'Y-mm-dd'

    Переменная может иметь любое число.
    $a="13123123";
    $b="2013";
    $c="2013-10-13";
    $d="2013-10";
    ТО есть $с ИСТИНА.
     
  2. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    == не работает?

    Добавлено спустя 1 минуту 58 секунд:
    А понял, попробуй регуляркой

    Добавлено спустя 1 минуту 24 секунды:
    Код (PHP):
    1. $pattern = '/\d{4}-\d{2}-\d{2}/';
    Попробуй так.

    Добавлено спустя 53 секунды:
    Правда месяц может оказаться и 99... это проблема?
     
  3. vold

    vold Новичок

    С нами с:
    10 окт 2013
    Сообщения:
    23
    Симпатии:
    0
    Дата будет разная. Ручной ввод. == не пойдет.
     
  4. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
  5. vold

    vold Новичок

    С нами с:
    10 окт 2013
    Сообщения:
    23
    Симпатии:
    0
    <?php
    $a = '2001-12-12';
    $pattern = '/\d{4}-\d{2}-\d{2}/';
    if ( $a == $pattern) {
    echo "истина";
    } else {
    echo "ложь";
    }
    ?>

    Ложь
     
  6. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    Я дал ссылку там пример более красивый

    Код (PHP):
    1. $date = DateTime::createFromFormat('Y-mm-dd', $yourStringWhichMightBeADate);
    2. if ($date)
    3. {
    4.     // it's a date, so use it
    5. }
    Попробуй

    Добавлено спустя 50 секунд:
    Ты в курсе что такое регулярное выражение?
     
  7. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    1. проверить наличие минуса. если есть - пасить strtotime()
    2. сделать (int) и проверить что число больше 2050 скажем так. если да - то это секунды юникса, считай, что спарсили. Если нет - то год. приписать к строке "-1-1" и парсить strtotime()

    Добавлено спустя 1 минуту 23 секунды:
    о да, меня тоже тянет на всякое переодически. приходтся переучиваться
     
  8. vold

    vold Новичок

    С нами с:
    10 окт 2013
    Сообщения:
    23
    Симпатии:
    0
    нет

    Добавлено спустя 7 минут 3 секунды:
    А как его правильно реализовать? Что то у меня в голове каша получилось.

    Добавлено спустя 6 минут 38 секунд:
    Код (Text):
    1.  
    2. <?php
    3.     $a = '2001-12-12';
    4.     $date = DateTime::createFromFormat('Y-mm-dd', '2013-05-13');
    5.     if ( $date == $a) {
    6. echo "истина";
    7.     } else {
    8. echo "ложь";
    9. }
    10. ?>
    ЛОЖЬ
    Что то не получается. Поспешил с выводами своей работы. СПАСИБО всем.

    Добавлено спустя 41 минуту 3 секунды:
    Код (Text):
    1.  
    2. <?php
    3. function ProverkaFormataDati($data){
    4.   $regularka = "/^([0-9]{2})-([0-9]{2})-([0-9]{4})$/";
    5.  
    6.   if ( preg_match($regularka, $data, $razdeli) ) :
    7.     /* Формат проверки - MM, DD, YYYY: */
    8.     if ( checkdate($razdeli[2],$razdeli[1],$razdeli[3]) )
    9.       return true;
    10.     else
    11.       return false;
    12.   else :
    13.     return false;
    14.   endif;
    15. }
    16.  
    17. /**
    18.  * Примеры использования функции:
    19.  */
    20.  
    21. $data1 = "20-12-2012";
    22. if ( ProverkaFormataDati($data1) )
    23.   echo "$data1 - формат даты указан верно.<br />";
    24. else
    25.   echo "$data1 - формат даты указан неверно.<br />";
    26.  
    27. $data2 = "436543653";
    28. if ( ProverkaFormataDati($data2) )
    29.   echo "$data2 - формат даты указан верно.<br />";
    30. else
    31.   echo "$data2 - формат даты указан неверно.<br />";
    32. ?>
     
  9. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    Что тут не понятно? $date булево занчение. если $yourStringWhichMightBeADate дата в правильном формате то $date true иначе false.
     
  10. noganno

    noganno Новичок

    С нами с:
    26 авг 2013
    Сообщения:
    58
    Симпатии:
    0
    Может стоит реализовать функционал так, что бы пользователь смог ввести только нужный вам формат?
     
  11. vold

    vold Новичок

    С нами с:
    10 окт 2013
    Сообщения:
    23
    Симпатии:
    0
    Да я так и сделал, выпадает меню календаря и там выбираешь дату. но есть маленький косяк, туда можно и в ручную вводить, вот и хочу поставить скажем (защита от дураков) чтобы не могли вводить подряд всякие цифры.
     
  12. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    А я в игноре видимо.
     
  13. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    Ну зачем писать глупости?
    Код (PHP):
    1. return checkdate($razdeli[2],$razdeli[1],$razdeli[3]);
    2.  
     
  14. vold

    vold Новичок

    С нами с:
    10 окт 2013
    Сообщения:
    23
    Симпатии:
    0
    Почему глупости? но он сработал. Чем выше написанное (Я новичок и не разобрался как правильно писать код).

    Вот то что изменил в этом коде, начал работать
    Код (Text):
    1.  
    2. <?php
    3. function ProverkaFormataDati($data){
    4.    $pattern = "/^([0-9]{4})-([0-9]{2})-([0-9]{2})$/"; // Основной 2013-10-22  
    5.   if ( preg_match($pattern, $data, $razdeli) ) :
    6. if ( checkdate($razdeli[2],$razdeli[3],$razdeli[1]) )
    7.       return true;
    8.     else
    9.       return false;
    10.   else :
    11.     return false;
    12.   endif;
    13. }
    14. $data1 = "22-10-2013";
    15. if ( ProverkaFormataDati($data1) )
    16.   echo "$data1 - формат даты указан верно.<br />";
    17. else
    18.   echo "$data1 - формат даты указан неверно.<br />";
    19.  
    20. $data2 = "2013-10-22";
    21. if ( ProverkaFormataDati($data2) )
    22.   echo "$data2 - формат даты указан верно.<br />";
    23. else
    24.   echo "$data2 - формат даты указан неверно.<br />";
    25.  
    26.   $data3 = "10-22-2013";
    27. if ( ProverkaFormataDati($data3) )
    28.   echo "$data3 - формат даты указан верно.<br />";
    29. else
    30.   echo "$data3 - формат даты указан неверно.<br />";
     
  15. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    Ну потому что вы 4 строками пишете то, что можно одной строкой написать. Я же вам показал в своём сообщении.
     
  16. Slavka

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

    С нами с:
    1 окт 2013
    Сообщения:
    722
    Симпатии:
    41
  17. vold

    vold Новичок

    С нами с:
    10 окт 2013
    Сообщения:
    23
    Симпатии:
    0
    Я не знаю как прикрутить все это.
     
  18. Slavka

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

    С нами с:
    1 окт 2013
    Сообщения:
    722
    Симпатии:
    41
    блин посмотрел дальше - нашел недостаток - там дата проверяется в формате исо
    01/01/2010
    но есть локализация на русский может и формат даты можно поменять
     
  19. vold

    vold Новичок

    С нами с:
    10 окт 2013
    Сообщения:
    23
    Симпатии:
    0
    Этот вариант конечно круче. )
     
  20. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    я ж написал универсальный алгоритм =)
     
  21. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    Проверять и там и там надо :)
    Человек хочет готовый код :(
     
  22. vold

    vold Новичок

    С нами с:
    10 окт 2013
    Сообщения:
    23
    Симпатии:
    0
  23. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
  24. Slavka

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

    С нами с:
    1 окт 2013
    Сообщения:
    722
    Симпатии:
    41
    там помойму достаточно из папки подгрузить js русик .. /localization/messages_ru.js
    только грузи его после валидатора