检测PHP字符串中的特定日期类型

时间:2019-04-15 22:32:53

标签: php regex-negation

好吧,我正在使用一个库从X网站获取一些字符串,该字符串看起来像:

2019年3月17日,欧洲中部时间由Gaz'haragoth死于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');
}

这是我的代码现在的样子,我怎么只能得到“ Mar 17 2019,16:08:43”?

谢谢!

5 个答案:

答案 0 :(得分:0)

graphql-java-servlet

答案 1 :(得分:0)

可以使用

的正则表达式搜索
(.*?)[0-9]+[:][0-9]+[:][0-9]+

在字符串上。在hh:mm:ss标记之前获取所有内容,而在

之后获取任何内容

如果每次都具有相同的长度,也可以将子字符串设置到某个位置。

答案 2 :(得分:0)

如果字符串的前半部分(日期)是标准的,那么您也可以使用此字符串而无需任何正则表达式:

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

答案 3 :(得分:0)

您可以使用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似乎是最简单的方法,只要您将日期格式设置为前导零,则字符串的日期部分应始终相同。

答案 4 :(得分:0)

尝试

<?php
$str = "Mar 17 2019, 16:08:43 CET Died at Level 418 by Gaz'haragoth";
echo preg_replace('/^(.+\d+:\d+:\d+).+$/', '$1', $str);
?>