Обнаружение определенного типа даты в строке PHP - PullRequest
3 голосов
/ 16 апреля 2019

Хорошо, я использую библиотеку, чтобы получить некоторые строки с веб-сайта X, эта строка выглядит следующим образом:

17 марта 2019, 16:08:43 CET Умер на 418-м уровне от Газ'Харагота.

if($player->getDeaths()) {
    $mystring = $player->getDeaths()[0];
    $dateString = preg_replace("/\([^)]+\)/","",$mystring);
    $date = new DateTime($dateString);
    echo $date->format('Y-m-d H:i:s');
}

Вот так выглядит мой код прямо сейчас, как я могу получить только «17 марта 2019, 16:08:43»?

Спасибо!

Ответы [ 5 ]

0 голосов
/ 16 апреля 2019

Попробуйте

<?php
$str = "Mar 17 2019, 16:08:43 CET Died at Level 418 by Gaz'haragoth";
echo preg_replace('/^(.+\d+:\d+:\d+).+$/', '$1', $str);
?>
0 голосов
/ 16 апреля 2019

Вы можете использовать DateTime::createFromFormat для создания объекта DateTime из этой строки.

$string = "Mar 17 2019, 16:08:43 CET Died at Level 418 by Gaz'haragoth.";

$date = DateTime::createFromFormat('M d Y, H:i:s T+', $string);

Затем вы можете выводить его в любом формате, который вам нравится.

Возможно, вам не нужнохотя объект DateTime.Если все, что вам нужно сделать, это удалить завершающий текст, то кажется, что substr будет самым простым способом, если ваш день отформатирован с начальным нулем, часть даты строки всегда должна иметь одинаковую длину.

0 голосов
/ 16 апреля 2019

Можно использовать поиск по регулярному выражению

(.*?)[0-9]+[:][0-9]+[:][0-9]+

в строке.Получает все перед тэгом hh: mm: ss и ничего после

Если подстрока тоже переместится в определенную позицию, будет работать, если она будет каждый раз иметь одинаковую длину.

0 голосов
/ 16 апреля 2019

Если первая половина строки (дата) является стандартной, вы также можете использовать ее без необходимости в регулярных выражениях:

$output_str = implode(" ",array_splice(explode(" ",$input_str),0,4));

0 голосов
/ 16 апреля 2019
echo substr("Mar 17 2019, 16:08:43 CET Died at Level 418 by Gaz'haragoth.", 0, 21);
...