【问题标题】:Trim string before character in PHP在PHP中的字符前修剪字符串
【发布时间】:2016-10-28 12:46:17
【问题描述】:

我有这个日期/时间字符串

$dateTime = '2016-11-01T16:00:59:999000Z';

我希望能够删除Z 之前的3 位数字。 不太确定该怎么做。我试图重做这个:

substr($dateTime, 0, -3);

但不知道如何在 Z 之前而不是在字符串末尾进行修剪。

【问题讨论】:

标签: php datetime substring rfc3339


【解决方案1】:
preg_replace("/\d{3}(Z)($)?/", "$1$2", "2016-11-01T16:00:59:999000Z");
// Result: 2016-11-01T16:00:59:999Z

即使Z 不在字符串末尾,也应该完成这项工作。

【讨论】:

    【解决方案2】:
    substr_replace($dateTime, '', -4, 3);
    

    【讨论】:

    • 我比我自己的答案更喜欢这个,但除非你提供解释,否则我不能投票。
    • :) 要求是删除 Z 之前的 3 位。substr_replace 首先找到那些子字符串并替换为空字符串:供参考php.net/manual/en/function.substr-replace.php
    • 是的,我知道;我可以阅读你的代码。添加注释您的代码,以便 OP 可以轻松阅读和理解未来。请参阅我的答案以获取良好 cmets 的示例。
    • 感谢您的建议 :) 我会记住的
    【解决方案3】:

    如果你知道不需要的000 总是在同一个位置,你可以只subtr() 字符串两次:

    <?php
    $date = '2016-11-01T16:00:59:999000Z';
    
    echo substr($date, 0, -4).substr($date, -1); // this produces 2016-11-01T16:00:59:999Z
    
    // substr($date, 0, -4) produces 2016-11-01T16:00:59:999
    // the period "." is the concatenation operator
    // substr($date, -1) produces Z
    

    【讨论】:

      【解决方案4】:
      $dateTime = '2016-11-01T16:00:59:999000Z';
      
      $result = substr($dateTime, 0, 23).$dateTime[strlen($dateTime)-1];
      

      【讨论】:

      • 虽然这段代码 sn-p 可以解决问题,但including an explanation 确实有助于提高帖子的质量。请记住,您是在为将来的读者回答问题,而这些人可能不知道您提出代码建议的原因。
      猜你喜欢
      • 1970-01-01
      • 2012-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-22
      • 2014-10-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多