Выясните, содержит ли строка в себе дату

#php

#php

Вопрос:

У меня есть строка «scbdemo2016-10-21:getlastweekReadBooks4795». Как узнать, что в приведенной выше строке есть дата, и для проверки даты используется дата текущего дня.

Комментарии:

1. В вашей строке всегда присутствует 4795.

2. Да, она может содержать что-то вроде tat .. но там будет только одна дата, например «2016-10-21»

Ответ №1:

Легко выполняется с помощью регулярных выражений:

 $isToday = stringDateToday("scbdemo2016-10-21:getlastweekReadBooks4795");

function stringDateToday($string) {
    $reg = "/d{4}-d{2}-d{2}/";

    $date = new DateTime();

    preg_match($reg, $string, $matches);

    if (isset($matches[0])) {
        return $matches[0] == $date->format("Y-m-d");
    }

    return false;
}
  

stringDateToday() вернет true , если дата в строке сегодняшняя. Дата может быть в любом месте строки.

Редактировать:

Как предложено в комментариях, вы можете изменить new DateTime() на new DateTime('now', new DateTimeZone('Europe/London')) , чтобы указать часовой пояс.

Комментарии:

1. Просто будьте осторожны с разными часовыми поясами. Возможно, было бы лучше быть явным: new DateTime('now', new DateTimeZone('Europe/London')); Но это зависит от того, чему OP хочет соответствовать и где.

2. @Progrock Да. Конечно, это предполагает, что даты соответствуют времени сервера.

Ответ №2:

Вот ваш код, но в любом случае он работает только со строкой, имеющей символ :

 function checkdata($date, $format)
{
    $format=strstr(preg_replace("/[a-zA-Z] /", '',$format),":",true);
   // date_default_timezone_set('UTC');
    $d = DateTime::createFromFormat($format, $date);
    if($d amp;amp; $d->format($format) === $date) {

        return true;
    } else {
        return false;
    }
}

$data="scbdemo2016-10-21:getlastweekReadBooks4795";

if(checkdata($data,'Y-m-d'))
echo "Yes";
else
echo "NO";
  

Комментарии:

1. Побочный эффект здесь, связанный с установкой часового пояса на UTC, может быть нежелательным.