好的,我正在使用一个库从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”?
谢谢!
echo substr("Mar 17 2019, 16:08:43 CET Died at Level 418 by Gaz'haragoth.", 0, 21);
可以使用正则表达式搜索
(.*?)[0-9]+[:][0-9]+[:][0-9]+
在字符串上。获取hh:mm:ss标记之前的所有内容,之后没有任何内容
如果每次都将使用相同的长度,那么将子字符串提升到某个位置也是有效的。
如果字符串的前半部分(日期)是标准的,您也可以使用它而不需要任何正则表达式:
$output_str = implode(" ",array_splice(explode(" ",$input_str),0,4));
您可以使用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
似乎是最简单的方式,只要您的日期格式化为前导零,字符串的日期部分应始终保持相同的长度。
尝试
<?php
$str = "Mar 17 2019, 16:08:43 CET Died at Level 418 by Gaz'haragoth";
echo preg_replace('/^(.+\d+:\d+:\d+).+$/', '$1', $str);
?>