【问题标题】:Detecting a specific date type in PHP string检测 PHP 字符串中的特定日期类型
【发布时间】:2019-09-05 23:05:43
【问题描述】:

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

2019 年 3 月 17 日,欧洲中部时间 16:08:43,被加兹哈拉苟斯死于 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”?

谢谢!

【问题讨论】:

    标签: php regex-negation


    【解决方案1】:
    echo substr("Mar 17 2019, 16:08:43 CET Died at Level 418 by Gaz'haragoth.", 0, 21);
    

    【讨论】:

      【解决方案2】:

      可以使用正则表达式搜索

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

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

      如果每次都是相同的长度,那么将子字符串放到某个位置也可以。

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          【解决方案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 似乎是最简单的方法,只要您的日期格式为前导零,则字符串的日期部分应始终具有相同的长度。

          【讨论】:

            【解决方案5】:

            试试

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

            【讨论】:

              猜你喜欢
              • 2016-07-02
              • 1970-01-01
              • 2020-07-01
              • 1970-01-01
              • 2011-03-25
              • 2011-08-29
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多