#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, может быть нежелательным.