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

问题描述 投票:3回答:5

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

2019年3月17日,16:08:43 CET由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');
}

这就是我的代码现在的样子,我怎么才能得到“2019年3月17日16:08:43”?

谢谢!

php regex-negation
5个回答
0
投票
echo substr("Mar 17 2019, 16:08:43 CET Died at Level 418 by Gaz'haragoth.", 0, 21);

0
投票

可以使用正则表达式搜索

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

在字符串上。获取hh:mm:ss标记之前的所有内容,之后没有任何内容

如果每次都将使用相同的长度,那么将子字符串提升到某个位置也是有效的。


0
投票

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

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


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似乎是最简单的方式,只要您的日期格式化为前导零,字符串的日期部分应始终保持相同的长度。


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);
?>
© www.soinside.com 2019 - 2024. All rights reserved.